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

SQLiteStudio中如何匹配表行值与另一表列头提取对应价格

SQLite环境下无Pivot函数匹配阶梯定价填充采购表价格方案

核心思路

不用做行转列操作,直接利用Table2宽表的列与ProductID一一对应的特性,用CASE WHEN分支按商品ID取对应列的价格,再通过子查询匹配符合采购量的最高阶梯档位即可,全语法兼容SQLite所有版本,不需要依赖Pivot或其他特殊函数。

具体实现步骤

  • 先确认阶梯定价匹配规则:常规阶梯价规则为采购量达到某档位后,享受该档位对应价格,即对每条采购记录,匹配Table2中档位值 ≤ 实际采购量的最高档位即可。如果业务是固定区间定价(比如1-20件用一档价、21-50件用二档价),这个匹配逻辑同样适用。
  • 先执行查询语句验证匹配结果,避免直接更新出错:
SELECT 
    t1.ProductID,
    t1.ProductName,
    t1.Quantity,
    -- 按商品ID直接取Table2对应列的价格,替代Pivot行转列
    CASE t1.ProductID
        WHEN 'A1234' THEN t2.A1234
        WHEN 'B2345' THEN t2.B2345
        WHEN 'C3456' THEN t2.C3456
    END AS CalcedPrice
FROM Table1 t1
-- 关联匹配不超过当前采购量的最高档位
INNER JOIN Table2 t2 
  ON t2.Quantity = (SELECT MAX(Quantity) FROM Table2 WHERE Quantity <= t1.Quantity)
;
  • 确认查询返回的价格和业务规则一致后,执行更新语句填充Table1的Price字段:
UPDATE Table1
SET Price = (
    SELECT 
        CASE Table1.ProductID
            WHEN 'A1234' THEN t2.A1234
            WHEN 'B2345' THEN t2.B2345
            WHEN 'C3456' THEN t2.C3456
        END
    FROM Table2 t2
    WHERE t2.Quantity <= Table1.Quantity
    -- 倒序取最高档位,Limit 1直接拿到匹配行,写法更简洁
    ORDER BY t2.Quantity DESC
    LIMIT 1
);

扩展说明

如果后续新增商品,只需要做两处调整即可:

  1. 在Table2中新增对应ProductID命名的价格列
  2. 在两个SQL的CASE分支里新增对应的WHEN '商品ID' THEN t2.商品ID判断
    不需要调整整体查询结构,维护成本很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:33:30