2012-12-25 145 views
2

我在玩AdvantureWorks DB,但我沒有SalesOrderDetail表上的實際銷售值。此行應該包含LineTotal通過訂單ID彙總。SQL-group by into列更新

我需要輸入這些值轉化爲實際的銷售列每個訂單ID行:

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

回答

0

你需要通過向查詢添加要分組的字段:

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

craigmj, 這種說法提出ActualSales作爲別名,但不會更新ActualSales列中的值。 我錯過了什麼嗎? – uvluni

0

你可以JOINUPDATE像這樣:

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; 

或者:的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; 
0
UPDATE x 
SET x.ActualSales = x.NewActualSales 
FROM (
     SELECT ActualSales, SUM(LineTotal) OVER (PARTITION BY SalesOrderID) AS NewActualSales 
     FROM Sales.SalesOrderDetail 
    ) x