Sql-Server

從SQL中目前行的數據中減去前行數據的總和

  • May 13, 2016

我想在 SSMS 中創建一個表或視圖,它應該有一個名為qoh的列。在該列中應該計算列rel_qty的總和值。IE

  1. qoh的第一個數據與第一行的rel_qty的值 相同
  2. qoh的第二個值應該是第一行和第二行的 rel_qty值之和。
  3. 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 更新

引用自:https://dba.stackexchange.com/questions/138025