Données SUM basées sur une autre colonne

J'essaie d'get la sum des données en fonction de leur GROUPNO .

Je veux mettre la SUM de VALUE basée sur GROUPNO et le mettre dans la VALUE de données avec un type de SUM dans le même GROUPNO .

C'est ma table:

 ID NAME Type VALUE GROUPNO 1 PRODUCTS HEADER NULL 1 2 Pencil A 10 1 3 Ruler A 20 1 4 TOTALPROD SUM NULL 1 5 FOODS HEADER NULL 2 6 Donut A 40 2 7 Bread A 40 2 8 TOTALFOODS SUM NULL 2 

Je veux que ma table soit comme ceci:

 ID NAME Type VALUE GROUPNO 1 PRODUCTS HEADER NULL 1 2 Pencil A 10 1 3 Ruler A 20 1 4 TOTALPROD SUM 30 1 5 FOODS HEADER NULL 2 6 Donut A 40 2 7 Bread A 40 2 8 TOTALFOODS SUM 80 2 

Vous pouvez utiliser un select interne comme ceci:

 UPDATE t Set Value = isnull((SELECT Sum(t1.VALUE) FROM yourTable t1 WHERE t1.GroupNo = t.GroupNo AND t1.Type = 'A'), 0) FROM yourTable t WHERE t.Type = 'SUM' 

Ceci est un exemple de travail complet:

 DECLARE @DataSource TABLE ( [ID] TINYINT IDENTITY(1,1) ,[NAME] VARCHAR(18) ,[Type] VarCHAR(8) ,[VALUE] INT ,[GROUPNO] TINYINT ); INSERT INTO @DataSource ([NAME], [Type], [VALUE], [GROUPNO]) VALUES('PRODUCTS', 'HEADER', NULL, '1') ,('Pencil', 'A', '10', '1') ,('Ruler', 'A', '20', '1') ,('TOTALPROD', 'SUM', NULL, '1') ,('FOODS', 'HEADER', NULL, '2') ,('Donut', 'A', '40', '2') ,('Bread', 'A', '40', '2') ,('TOTALFOODS', 'SUM', NULL, '2'); WITH DataSource ([GROUPNO], [Value]) AS ( SELECT [GROUPNO] ,SUM([Value]) FROM @DataSource WHERE [Type] = 'A' GROUP BY [GROUPNO] ) UPDATE @DataSource SET [VALUE] = DS2.[Value] FROM @DataSource DS1 INNER JOIN DataSource DS2 ON DS1.[GROUPNO] = DS2.[GROUPNO] AND DS1.[Type] = 'SUM' SELECT * FROM @DataSource 

entrez la description de l'image ici

Quelque chose comme ça:

 DECLARE @GrpNum int = 1 UPDATE [Table_Name] SET VALUE = (SELECT SUM(VALUE) FROM [Table_Name] WHERE GroupNo = @GrpNum AND Type = 'A') WHERE GroupNo = @GrpNum AND Type = 'SUM'