【发布时间】:2021-12-21 15:18:04
【问题描述】:
| order | Qty | Inventory | Type |
|---|---|---|---|
| 1001 | -1 | -1 | Customer Order |
| 1002 | -1 | -2 | Customer Order |
| 1003 | -1 | -3 | Customer Order |
| 1004 | -1 | -4 | Customer Order |
| 1005 | -5 | -9 | Customer Order |
| 1006 | 3 | -6 | Purchase Order |
| 1007 | 6 | 0 | Purchase Order |
通过上表,我们能否找到满足客户订单的采购订单号。
示例:
| order # | Qty | Inventory | Type | Purchase order # that will fulfil order |
|---|---|---|---|---|
| 1001 | -1 | -1 | Customer Order | 1006 |
| 1002 | -1 | -2 | Customer Order | 1006 |
| 1003 | -1 | -3 | Customer Order | 1006 |
| 1004 | -1 | -4 | Customer Order | 1007 |
| 1005 | -5 | -9 | Customer Order | 1007 |
| 1006 | 3 | -6 | Purchase Order | |
| 1007 | 6 | 0 | Purchase Order |
SQL
SELECT *
, CASE WHEN Inventory >= 0 THEN OrderNumber
ELSE LEAD(CASE WHEN QTY > 0 THEN OrderNumber END) IGNORE NULLS
OVER(ORDER BY OrderNumber)
END PurchaseOrderNoToFulfil
FROM OrderTable;
上述查询不跟踪已使用的采购订单。例如,它显示了客户订单 # 1004 和 1005 的采购订单 # 1006。由于 1006 只有 3 个可用数量,因此它可以满足订单 1003,但不能超过此数量。
更多上下文:
在订单 1001 上,库存为 -1(超卖)。订单 1002,库存为 -2,依此类推。在订单 1006 上,有一个数量为 3 的传入采购订单来履行之前的客户订单。但是3的数量最多只能完成1003个订单。1004和1005订单要等到1007 PO进来。
【问题讨论】:
-
请添加您目前的查询以及您遇到问题的地方。
-
SELECT * , CASE WHEN Inventory >= 0 THEN OrderNumber ELSE LEAD(CASE WHEN QTY > 0 THEN OrderNumber END) IGNORE NULLS OVER(ORDER BY OrderNumber) END PurchaseOrderNoToFulfil FROM OrderTable;
-
我还是不明白这里的规则/假设是什么。
-
在订单 1001 上,库存为 -1(超卖)。订单 1002,库存为 -2,依此类推。在订单 1006 上,有一个数量为 3 的传入采购订单来履行之前的客户订单。但是3个的数量最多只能完成1003个订单。1004和1005订单要等到1007 PO进来。
标签: sql