Sql-Server
從SQL中目前行的數據中減去前行數據的總和
我想在 SSMS 中創建一個表或視圖,它應該有一個名為qoh的列。在該列中應該計算列rel_qty的總和值。IE
- qoh的第一個數據與第一行的rel_qty的值 相同。
- qoh的第二個值應該是第一行和第二行的 rel_qty值之和。
- qoh的第三個值 應該是第一行、第二行和第三行的rel_qty值之和。
有沒有可能做到這一點?
這是我的查詢。但是這個查詢只滿足第一行和第二行而不是更多,
SELECT a.id, a.tot_qty, a.rel_qty, (a.tot_qty - COALESCE (a.rel_qty + (SELECT b.rel_qty FROM dbo.foo AS b WHERE (b.id = a.id - 1)), a.rel_qty) ) AS qoh FROM dbo.foo AS a ORDER BY a.id
如果我的 id 跳過一個值,則此查詢無法進行計算。我怎樣才能解決這個問題?
這是我的結果的截圖
看來你需要一個執行總計。
如果
tot_qty
所有行都相同,那麼您可以使用SELECT id, tot_qty, rel_qty, tot_qty - SUM(rel_qty) OVER (ORDER BY id ROWS UNBOUNDED PRECEDING) AS qoh FROM dbo.foo ORDER BY id;
ROWS UNBOUNDED PRECEDING
是 的縮寫版本ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
。此視窗框架選項意味著對於每一行,
SUM
將包括其自身和所有前輩按id
.該
ROWS
選項可能對效率很重要,如執行總計的最佳方法中所述 - 針對 SQL Server 2012 更新