Bonjour
Problème : Mise à jour d'un champ de table à partir le résultat d'une requête faite par [ With et CROSS]
Je possède une table Checks
Je dois calculer le cumul de la colonne Amount c'est pourquoi j'ai procédé à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE dbo.Checks ( Client VARCHAR(32), RowNr int, Amount DECIMAL(12,2), Cumul DECIMAL(12,2), ); INSERT dbo.Checks(Client, RowNr, Amount) SELECT 'Company A', '1', 1 UNION ALL SELECT 'Company A', '2', 1 UNION ALL SELECT 'Company A', '3', 5 UNION ALL SELECT 'Company B', '4', 3 UNION ALL SELECT 'Company A', '5', 1 UNION ALL SELECT 'Company B', '6', 2 UNION ALL SELECT 'Company B', '7', 1 UNION ALL SELECT 'Company B', '8', 5;
La requête dessus me calcul très bien le "Cumul" du champ "Amount"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 WITH Islands AS ( SELECT Client, RowNr, Amount, RowNr-ROW_NUMBER()OVER(PARTITION BY Client ORDER BY RowNr) IslId FROM Checks ) SELECT * FROM Islands I1 CROSS APPLY ( SELECT SUM(Amount) Cumul FROM Islands I2 WHERE I1.Client = I2.Client AND I1.IslId = I2.IslId AND I1.RowNr >= I2.RowNr )C
Maintenant je veux bien mettre à jour le champ Cumul par la jointure checks.RowNr = Islands.RowNr mais je n'arrive pas à faire..! Qu'est ce qu'il y a comme problème sur le code dessous ?
Merci 1000 fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Update checks set checks.cumul = Islands.cumul from WITH Islands AS ( SELECT Client, RowNr, Amount, RowNr-ROW_NUMBER()OVER(PARTITION BY Client ORDER BY RowNr) IslId FROM Checks ) SELECT * FROM Islands I1 CROSS APPLY ( SELECT SUM(Amount) Cumul FROM Islands I2 WHERE I1.Client = I2.Client AND I1.IslId = I2.IslId AND I1.RowNr >= I2.RowNr )C join checks on checks.RowNr = Islands.RowNr
Partager