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

基于层级规则的定价SQL查询开发需求与问题咨询

完善后的SQL实现方案

针对你提出的定价规则,我们可以通过CTE(公共表表达式)先预处理lvlholder客户下的最新价格记录,再通过关联查询匹配到主查询中的对应价格,完整SQL如下:

WITH LvlHolderPrices AS (
    SELECT 
        itemcode,
        uom,
        blvl,
        price,
        -- 按商品、单位、级别分组,取每组中最新生效的价格
        ROW_NUMBER() OVER (PARTITION BY itemcode, uom, blvl ORDER BY start_date DESC) AS rn
    FROM [test].[testtable].[pricing]
    WHERE start_cust_or_group = 'lvlholder'
      AND RowDeleted = 0
)
SELECT 
    p.itemcode,
    p.uom,
    p.trtype, 
    p.alvl,
    p.blvl,
    p.start_date,
    CASE 
        -- 规则1:trtype为Quot时直接取当前price
        WHEN p.trtype = 'Quot' THEN p.price 
        -- 规则2:Alvl>0时,匹配lvlholder中同级别(Blvl=Alvl)的最新价格
        WHEN p.alvl > 0 THEN lhp1.price
        -- 规则3:trtype为空且Alvl=0时,取lvlholder中Blvl=8的最新默认价格
        WHEN p.trtype = '' AND p.alvl = 0 THEN lhp2.price
        ELSE 0 
    END AS LevelResult 
FROM [test].[testtable].[pricing] p
-- 关联规则2对应的最新级别价格
LEFT JOIN LvlHolderPrices lhp1 
    ON p.itemcode = lhp1.itemcode 
    AND p.uom = lhp1.uom 
    AND p.alvl = lhp1.blvl 
    AND lhp1.rn = 1
-- 关联规则3对应的默认级别价格
LEFT JOIN LvlHolderPrices lhp2 
    ON p.itemcode = lhp2.itemcode 
    AND p.uom = lhp2.uom 
    AND lhp2.blvl = 8 
    AND lhp2.rn = 1
WHERE p.start_cust_or_group = 'test'  
   AND p.RowDeleted = 0
   AND p.item_or_pricecode IN ('ABC1234','X123456','BR23456','CX23456')
ORDER BY p.start_date DESC

关键说明:

  • LvlHolderPrices CTE:通过ROW_NUMBER()窗口函数,给lvlholder客户下的每个商品、单位、级别组合分配序号,最新的生效日期(start_date)序号为1,确保我们只取每组的最新价格。
  • 两次LEFT JOIN:分别匹配规则2和规则3对应的价格,避免因某级别无价格导致主查询记录被过滤。
  • CASE语句严格遵循你定义的三个优先级规则,确保逻辑顺序正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:22:06