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 :

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-
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    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 :

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
Cependant, je me retrouve avec 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    12556
3    1/3/2012    -null-
4    1/5/2012    5478
5    1/6/2012    5478
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).

Quelqu'un pourrait m'expliquer où je me trompe ?

D'avance merci