Sql-Server
減去前幾行的總和
我想在此表中創建總計欄位。但在 SQL Server 2008 中,不能在 OVER 子句中使用“order by”。
我有相同的 PO 和不同的 INV。我想要 Qty 欄位減去 Quantity 欄位和下一行 Total 欄位減去 Quantity 欄位。這是一個結構表。
這是一個結果。
這是我的程式碼,但在 ORDER BY 處出錯。
select t2.BaseRef 'PO',t2.BaseQty 'qty', t1.NumAtCard 'INV', t2.Quantity 'Quantity', t2.BaseQty - SUM(t2.Quantity) OVER (ORDER BY t1.DocDate) AS 'total' from OPDN t1 INNER JOIN PDN1 t2 ON t1.DocEntry = t2.DocEntry
我可以使用其他方式對這些數據進行排序嗎?
如果
SUM() OVER()
不支持,您可以嘗試以下方法。行按 INV 編號作為文本 (INV100, INV105, …) 排序,而不是按編號 (100, 105, …)。輸入:
CREATE TABLE #PO ( PO varchar(10), DocEntry int, Qty int ) CREATE TABLE #INV ( INV varchar(10), DocEntry int, Qty int ) INSERT INTO #PO (PO, DocEntry, Qty) VALUES ('A123', 1, 500) INSERT INTO #PO (PO, DocEntry, Qty) VALUES ('B123', 2, 200) INSERT INTO #INV (INV, DocEntry, Qty) VALUES ('IV100', 1, 100) INSERT INTO #INV (INV, DocEntry, Qty) VALUES ('IV102', 2, 10) INSERT INTO #INV (INV, DocEntry, Qty) VALUES ('IV105', 1, 200) INSERT INTO #INV (INV, DocEntry, Qty) VALUES ('IV106', 2, 190) INSERT INTO #INV (INV, DocEntry, Qty) VALUES ('IV112', 1, 200)
陳述:
SELECT p.PO, p.Qty, i.INV, i.Qty AS Quantity, Total = p.Qty - ( SELECT SUM(rt.Qty) FROM #INV rt WHERE (rt.DocEntry = i.DocEntry) AND (rt.INV <= i.INV) ) FROM #PO p LEFT JOIN #INV i ON (p.DocEntry = i.DocEntry) ORDER BY p.DocEntry, i.INV
輸出:
PO Qty INV Quantity Total A123 500 IV100 100 400 A123 500 IV105 200 200 A123 500 IV112 200 0 B123 200 IV102 10 190 B123 200 IV106 190 0
SELECT PO.PO, PO.Qty, INV.INV, INV.Quantity, PO.Qty - SUM(INV.Quantity) OVER (PARTITION BY PO.PO ORDER BY INV.DocDate) total FROM PO, INV WHERE PO.DocEntry = INV.DocEntry ORDER BY PO.PO, INV.DocDate