SQL技术求助:如何基于Lookup表为事实表生成指定计算列?
解决方案:基于Lookup表映射生成动态计算列
问题场景
现有两张表:
- Lookup表(存储code与metric到目标列的映射):
code,metric,value 1,M1,sales 1,M2,cogs 2,M1,netprice 2,M2,discount
- 事实表(存储业务数据):
code,M1,M2 1,100,200 2,150,250
需要根据Lookup表的映射关系,为事实表生成新列:当code=1时,将M1的值映射到sales列、M2的值映射到cogs列;当code=2时,将M1的值映射到netprice列、M2的值映射到discount列,最终生成包含所有新列的结果表。
实现SQL语句
可以使用CASE条件语句实现映射逻辑,SQL如下:
SELECT f.code, f.M1, f.M2, CASE WHEN f.code = 1 THEN f.M1 END AS sales, CASE WHEN f.code = 1 THEN f.M2 END AS cogs, CASE WHEN f.code = 2 THEN f.M1 END AS netprice, CASE WHEN f.code = 2 THEN f.M2 END AS discount FROM 事实表 f;
逻辑说明
- 每个新列通过
CASE判断当前行的code值,匹配对应映射规则:- 当
code=1时,M1的值写入sales列,M2的值写入cogs列,其他code对应的这两列自动为NULL; - 当
code=2时,M1的值写入netprice列,M2的值写入discount列,其他code对应的这两列自动为NULL;
- 当
- 这种写法直接基于已知映射规则生成列,逻辑简洁且性能高效,适合固定映射场景。
若Lookup表的映射规则可能动态变化(比如后续新增code或metric映射),可使用动态SQL实现更灵活的列生成,但当前固定映射场景下,上述静态SQL已足够满足需求。
内容的提问来源于stack exchange,提问作者anurag
相关产品推荐
相关产品推荐

