SQL – Grouper par mise à jour de colonne

Je joue avec AdvantureWorks DB, mais je n'ai pas de valeurs Sales réelles sur la table SalesOrderDetail . Cette ligne supposée contenir l'agrégation LineTotal par l'ID de la command.

Je dois entrer ces valeurs dans la colonne Ventes réelles à chaque ligne d'ID de command:

 select SUM(LineTotal) as ActualSales from Sales.SalesOrderDetail group by SalesOrderID 

Vous devez append le champ que vous souhaitez regrouper à la requête:

 select SalesOrderID, sum(LineTotal) as ActualSales from SalesOrderDetail group by SalesOrderID 

Vous pouvez UPDATE avec JOIN comme ceci:

 UPDATE od SET od.ActualSalesColumn = g.ActualSales FROM Sales.SalesOrderDetail od INNER JOIN ( SELECT SalesOrderDetail, SUM(LineTotal) as ActualSales FROM Sales.SalesOrderDetail GROUP BY SalesOrderID ) g ON od.SalesOrderID = g.SalesOrderID; 

Ou: Avec un CTE:

 WITH ActualSales AS ( SELECT SalesOrderDetail, SUM(LineTotal) as ActualSales FROM Sales.SalesOrderDetail GROUP BY SalesOrderID ) UPDATE od SET od.ActualSalesColumn = g.ActualSales FROM Sales.SalesOrderDetail od INNER JOIN ActualSales g ON od.SalesOrderID = g.SalesOrderID; 
 UPDATE x SET x.ActualSales = x.NewActualSales FROM ( SELECT ActualSales, SUM(LineTotal) OVER (PARTITION BY SalesOrderID) AS NewActualSales FROM Sales.SalesOrderDetail ) x