You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

匹配客户订单对应履约采购单号的SQL实现方案咨询

正确SQL实现方案

实现逻辑说明

我们采用先进先出(FIFO)匹配规则,按订单生成顺序匹配最早到货的可用采购库存,核心逻辑是分别计算客户订单的累计履约需求量、采购订单的累计可用库存量,再通过范围匹配完成对应关系绑定。

完整SQL代码

WITH customer_orders AS (
    -- 计算所有客户订单的累计需求量,按订单号升序(即下单先后顺序)
    SELECT 
        订单编号,
        SUM(ABS(数量)) OVER (ORDER BY 订单编号) AS 累计需求
    FROM OrderTable
    WHERE 类型 = '客户订单'
),
purchase_orders AS (
    -- 计算所有采购订单的累计可用库存量,按订单号升序(即到货先后顺序)
    SELECT 
        订单编号 AS 采购单号,
        SUM(数量) OVER (ORDER BY 订单编号) AS 累计可用库存
    FROM OrderTable
    WHERE 类型 = '采购订单'
),
order_match AS (
    -- 为每个客户订单匹配满足累计需求的最早采购单
    SELECT 
        c.订单编号,
        MIN(p.采购单号) AS 履约对应采购单号
    FROM customer_orders c
    INNER JOIN purchase_orders p 
        ON p.累计可用库存 >= c.累计需求
    GROUP BY c.订单编号
)
-- 关联回原表输出最终结果
SELECT 
    t.订单编号,
    t.数量,
    t.库存,
    t.类型,
    m.履约对应采购单号
FROM OrderTable t
LEFT JOIN order_match m 
    ON t.订单编号 = m.订单编号
ORDER BY t.订单编号;

匹配结果验证

针对示例数据的匹配结果完全符合预期:

  • 订单1001~1003累计需求≤采购单1006的3件库存,全部匹配1006
  • 订单1004~1005剩余累计需求≤采购单1007的6件库存,全部匹配1007
  • 采购订单本身无匹配单号,符合业务要求

适配说明

该方案支持所有兼容标准SQL窗口函数的数据库(MySQL8.0+、PostgreSQL、Spark SQL、Hive等),如果需要调整履约优先级,只需修改窗口函数的ORDER BY字段即可。

内容的提问来源于stack exchange,提问作者rain_maker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:08