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

如何在SQL Server中基于条件获取下一行值填充价格区间上限?

解决SAP B1价格断点同步至WordPress的结束值计算问题

针对你在SQL Server上处理SAP B1价格断点同步的需求,我们可以利用**窗口函数LEAD()**来获取同客户同物料的下一个断点起始数量,进而计算当前断点的结束值。

完整SQL实现代码

SELECT 
    T2.CardCode,
    T2.ItemCode,
    T2.Amount AS [From],
    -- 计算结束值:如果存在同CardCode+ItemCode的下一行,取其From值减1,否则留空
    CASE 
        WHEN LEAD(T2.Amount) OVER (PARTITION BY T2.CardCode, T2.ItemCode ORDER BY T2.Amount) IS NOT NULL
        THEN LEAD(T2.Amount) OVER (PARTITION BY T2.CardCode, T2.ItemCode ORDER BY T2.Amount) - 1
        ELSE NULL
    END AS [To],
    T2.Price
FROM SPP2 T2
WHERE T2.ItemCode IN ('QMB01','QMB02')
  AND T2.CardCode IN ('*12','*13')
-- 按客户和物料分组后,按起始数量排序,确保断点顺序正确
ORDER BY T2.CardCode, T2.ItemCode, T2.Amount

代码说明

  • LEAD()窗口函数:LEAD(T2.Amount) OVER (PARTITION BY T2.CardCode, T2.ItemCode ORDER BY T2.Amount) 用于在同一个CardCode(客户编码)和ItemCode(物料编码)分组内,获取当前行的下一行的Amount(起始数量)值。
  • CASE逻辑:判断是否存在下一行的起始数量,如果存在则减1作为当前断点的结束值;如果是分组内的最后一行,则To字段设为NULL(留空)。
  • 排序规则:通过ORDER BY T2.Amount保证断点按起始数量从小到大排列,确保下一行的取值逻辑正确。

示例效果

假设原数据为:

CardCodeItemCodeAmountPrice
*12QMB011100
*12QMB011090
*12QMB012080

执行代码后结果为:

CardCodeItemCodeFromToPrice
*12QMB0119100
*12QMB01101990
*12QMB0120NULL80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:12:54