Bonjour
Je suis sous SQL Server Express 2012.
Mon problème est le suivant:
Considérons que j'ai une table Historique( IDGroupe uniqueidentifier, Date datetime, Montant money ).
Pour une raison particulière, certains Montant ont une valeur NULL. Par exemple :
Je voudrais que les valeurs NULL prennent la valeur du premier non NULL précédent. A partir de la table précédente, j'aimerais obtenir le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1 1/1/2012 12556 2 1/2/2012 -null- 3 1/3/2012 -null- 4 1/5/2012 5478 5 1/6/2012 -null-
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1 1/1/2012 12556 2 1/2/2012 12556 3 1/3/2012 12556 4 1/5/2012 5478 5 1/6/2012 5478
Au début j'ai pensé utiliser LAG de la sorte :
Cependant, je me retrouve avec le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT ID, Date, COALESCE( Montant, LAG(Montant) OVER (ORDER BY IDGroupe, Date) ) Montant FROM Historique
J'ai l'impression que LAG intervient après que les données furent collectées. Je veux dire qu'il me semble que pour la première ligne, vu que Montant n'est pas égal à NULL, celui-ci est bien repris. Que le second Montant étant, lui, égal à NULL prend la valeur de l'enregistrement précédent suivant la clause ORDER BY. Mais que le troisième, ayant aussi une valeur NULL, devrait se voir attribuer la valeur de l'enregistrement précédent suivant la clause ORDER BY. Or, cet enregistrement précédent semble toujours contenir NULL au lieu de la valeur précédemment attribuée (c'est-à-dire la valeur de la première ligne).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1 1/1/2012 12556 2 1/2/2012 12556 3 1/3/2012 -null- 4 1/5/2012 5478 5 1/6/2012 5478
Quelqu'un pourrait m'expliquer où je me trompe ?
D'avance merci
Partager