我一直在研究 CTE,试图确定是否可以使用订单数量递归更新库存数量记录,直到订单数量被消耗。
以下是表格和记录:
CREATE TABLE [dbo].[myOrder](
[Account] [float] NOT NULL,
[Item] [float] NOT NULL,
[Quantity] [float] NOT NULL
) ON [PRIMARY]
insert into dbo.myOrder values (12345, 1, 50)
CREATE TABLE [dbo].[myInventory](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Account] [float] NOT NULL,
[InvDate] [numeric](18, 0) NOT NULL,
[Item] [float] NOT NULL,
[Quantity] [float] NOT NULL,
[QuantitySold] [float] NOT NULL
) ON [PRIMARY]
insert into dbo.myInventory values (12345, 111287, 1, 45, 40)
insert into dbo.myInventory values (12345, 111290, 1, 40, 0)
insert into dbo.myInventory values (12345, 111290, 1, 12, 0)
insert into dbo.myInventory values (12345, 111291, 1, 25, 0)
myOrder 表中的记录指示要为帐户 12345 创建项目 #1、数量 50 的订单:
Account Item Quantity
------- ---- --------
12345 1 50
库存表显示帐户 12345 手头有大量商品 #1:
ID Account InvDate Item Quantity QuantitySold
-- ------- ------- ---- -------- ------------
1 12345 111287 1 45 40
2 12345 111290 1 40 0
3 12345 111290 1 12 0
4 12345 111291 1 25 0
目标是开始将 50 个订单数量插入库存记录中,直到 50 个全部消耗完。库存记录按 InvDate 列中的值排序。记录 1 有 5 个剩余数量 (45 - 40 = 5),这将使我们还有 45 个可供订单消耗。记录 2 可以消耗 40 个。记录 3 可以消耗最后 5 个。查询完成后,库存记录将如下所示:
ID Account InvDate Item Quantity QuantitySold
-- ------- ------- ---- -------- ------------
1 12345 111287 1 45 45
2 12345 111290 1 40 40
3 12345 111290 1 12 5
4 12345 111291 1 25 0
注意:库存表存储已售数量,而不是剩余数量,因此您必须进行数学运算(数量 - 已售数量)来确定每个库存记录的剩余数量。
我对 CTE 几乎毫无进展。我发现了很多进行选择的示例,其中 CTE 有 2 个部分 - 初始化部分和递归部分联合在一起。我可以用光标来写这个,但我认为可以用 CTE 来写,我想了解如何做。
如果有人可以确认 CTE 可以做到这一点或解释如何设置 CTE,我将不胜感激。谢谢!