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

如何在SQL中实现每个Item对应所有PriceList并补全BasePrice?

解决方法

核心思路是先生成所有商品(Item)与所有存在的价目表(PriceList)的全组合,再与原表关联补全价格,具体步骤如下:

1. 获取所有存在的价目表值

先从原表中提取所有不重复的PriceList,确保覆盖所有动态变化的价目表:

WITH AllPriceLists AS (
    SELECT DISTINCT PriceList
    FROM 你的表名
)

2. 生成商品与价目表的全组合

将所有唯一商品和所有价目表做交叉连接,得到每个商品对应每个价目表的基础框架:

, ItemPriceListPairs AS (
    SELECT 
        i.Item,
        i.BasePrice,
        pl.PriceList
    FROM (
        SELECT DISTINCT Item, BasePrice
        FROM 你的表名
    ) i
    CROSS JOIN AllPriceLists pl
)

3. 关联原表补全价格

将上面的全组合表与原表左连接,匹配对应Item和PriceList的价格,没有匹配到的就用BasePrice填充:

SELECT 
    p.Item,
    p.BasePrice,
    COALESCE(t.Price, p.BasePrice) AS Price,
    p.PriceList
FROM ItemPriceListPairs p
LEFT JOIN 你的表名 t 
    ON p.Item = t.Item 
    AND p.PriceList = t.PriceList
ORDER BY p.Item, p.PriceList;

补充说明

  • COALESCE函数会优先取原表的Price值,没有匹配记录时自动用BasePrice填充
  • 全程依赖动态获取的PriceList集合,后续新增04、05等值时无需修改SQL,自动适配
  • 如果原表中存在同一个Item+PriceList的重复记录,需根据业务需求处理,比如用MAX(t.Price)配合GROUP BY取有效价格

内容的提问来源于stack exchange,提问作者Riël

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:10:27