J'ai la table: 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 Réponses :
Vous pouvez utiliser lag () code>:
Mettre à jour le nom de la mise à jour Définir total = 100 Où id = 1 et trimestre = 2; p>
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
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
Si vous voulez que toutes les lignes soient identiques pour une année donnée code> code> et Il semble ne pas avoir besoin de logique conditionnelle. Vous pouvez simplement faire: p> id code>, il suffit d'utiliser max () code>:
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