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 );
扩展说明
如果后续新增商品,只需要做两处调整即可:
- 在Table2中新增对应ProductID命名的价格列
- 在两个SQL的CASE分支里新增对应的
WHEN '商品ID' THEN t2.商品ID判断
不需要调整整体查询结构,维护成本很低。
内容的提问来源于stack exchange,提问作者FranB
相关产品推荐
相关产品推荐

