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

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;
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
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
La requête dessus me calcul très bien le "Cumul" du champ "Amount"

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