没有光标的 TSQL 帮助

TSQL Help Without Cursor

我有以下数据,我需要的输出在列中:新库存。当前使用 Cursor 来导出值,但存在性能问题,因为 no.of 记录在源 table.

中增加
ID Item Inventory Projected Shipment Receipt LinkDate NewInventory
1 Item1 '10' '2' '5' '01-Sep-2021' '13'
1 Item2 '20' '3' '8' '02-Sep-2021' '18'
1 Item3 '30' '8' '15' '03-Sep-2021' '25'
2 Item4 '40' '10' '20' '01-Sep-2021' '50'
2 Item5 '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 + Current Row Receipt- Current Row Projected Shipment

这就变成了

新库存=13+8-3--变成18

目前所有这些逻辑都是在 Cursor 的帮助下实现的。请让我知道是否有仅使用 tsql 的直接方法来解决当前的性能问题。

请帮忙。

提前致谢

您可以使用 FIRST_VALUE()SUM() window 函数来实现:

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

它仅适用于 SUM() OVER

SELECT *, 
       SUM(Inventory + Receipt - ProjectedShipment) OVER (PARTITION BY ID ORDER BY LinkDate) NewInventory
FROM tablename;