我有以下資料,我需要的輸出是在列。新庫存。目前使用游標來匯出值,但隨著源表中記錄數量的增加,存在性能問題。
| ID | Item | 存貨預計出貨量收據鏈接日期新存貨||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Item1 | '10' | '2' | '5' | '01-Sep-2021' | '13' | 1 | Item2 | '20' | '3' | '8' | '02-Sep-2021' | '18' | 1 | Item3 | '30 | '30' | '8' | '15' | '03-Sep-2021' | '25' | 2 | Item4 | '40' | '10' | '20' | '01-Sep-2021' | '50' | 2 | Item5 | '50 | '50' | '25' | '20' | '02-Sep-2021' | '45' | 2 | Item6 | '60' | '10' | '20' | '03-Sep-2021' | '55' |
值是這樣計算的:對于每個基于ID Order by LinkDate的磁區,第一行將基于這個公式:
NewInventory = Inventory Receipt-ProjectedShipment
因此,第一條記錄變成:10 5-3=13。這個值成為基本庫存,并將在隨后的行中用于計算同一磁區的新庫存。
對于實體'Item2'的ID=1
New Inventory = Previous calculated NewInventory 當前 行 收據- 當前 行 預計出貨量
這就成了
新庫存=13 8- 3--這就變成了18
目前,所有這些邏輯都是在Cursor的幫助下實作的。請讓我知道是否有一個只用tsql的直接方法,以解決當前的性能問題。請幫助。
預先感謝
uj5u.com熱心網友回復:
你可以用FIRST_VALUE()和SUM()視窗函式來做:
SELECT *。
FIRST_VALUE(Inventory) OVER(PARTITION BY ID ORDER BY LinkDate)
SUM(Receipt - ProjectedShipment) OVER (PARTITION BY ID ORDER BY LinkDate) NewInventory
FROM tablename;
請看demo。
uj5u.com熱心網友回復:
只用SUM()OVER就可以了
SELECT *,
SUM(Inventory Receipt - ProjectedShipment) OVER (PARTITION BY ID ORDER BY LinkDate) NEWInventory
FROM tablename;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311061.html
標籤:
上一篇:在多個日期范圍內對行進行分組
