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