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

SQL技术求助:如何基于Lookup表为事实表生成指定计算列?

解决方案:基于Lookup表映射生成动态计算列

问题场景

现有两张表:

  1. Lookup表(存储code与metric到目标列的映射):
code,metric,value
1,M1,sales
1,M2,cogs
2,M1,netprice
2,M2,discount
  1. 事实表(存储业务数据):
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:23:19