0
votes

Oracle: Comment remplir les lacunes entre les lignes à l'aide des valeurs de la ligne suivante précédente à l'aide de SQL

J'ai la table: xxx pré>

Comment remplir les lacunes entre les lignes à l'aide des valeurs de la ligne suivante précédente dans Oracle pour obtenir la sortie suivante: P>

id  year    quarter total
==  ====    ======= =====
1   2010    1       100
1   2010    2       100
1   2010    3       100
1   2010    4       100
2   2010    1       20
2   2010    2       20
2   2010    3       20
2   2010    4       20


4 commentaires

Quelles sont les "valeurs de la prochaine ligne précédente"?


Que faites-vous si vous avez deux zéros d'affilée? Saisissez la valeur non nulle la plus récente? Ou au plus retourner une ligne?


@Gordon linoff: 100 devrait être la valeur suivante


@Michael soulevé dans ce cas, nous devrions y retourner une rangée


4 Réponses :


1
votes

Vous pouvez utiliser lag () : xxx


0 commentaires

0
votes

Mettre à jour le nom de la mise à jour Définir total = 100 Où id = 1 et trimestre = 2;


2 commentaires

Je pense que Sandro recherche une réponse générique, pas une solution pour cet exemple spécifique.


Je viens d'utiliser le principe du baiser lol



0
votes

Vous pouvez utiliser une plage avec une fonction analytique. Travaillera également avec AVG ()

select 
    id, 
    year, 
    quarter, 
    case 
        when 
            total = 0 then
            max(total) over (partition by id order by year,quarter RANGE BETWEEN 1 preceding and 1 following) 
        else total
    end total
from mytable


0 commentaires

1
votes

Si vous voulez que toutes les lignes soient identiques pour une année donnée et id , il suffit d'utiliser max () : xxx

Il semble ne pas avoir besoin de logique conditionnelle. Vous pouvez simplement faire: xxx


0 commentaires