Informatica环境下使用自连接实现表转换的SQL查询方案咨询
Informatica自连接实现数据转换SQL方案
转换规则梳理
通过对比输入输出数据,可明确转换逻辑如下:
- 每个CODE需保留所有原有存在的CATEGORY值
- 若CODE缺失原始CATEGORY=1,补充一行CATEGORY=100的记录
- 若CODE缺失原始CATEGORY=2,补充一行CATEGORY=200的记录
- 所有记录的COLOR与对应CODE的原有COLOR值保持一致
自连接实现SQL
假设原始表名为src_table,可使用如下标准ANSI SQL实现,兼容Informatica源限定符/SQL转换组件使用:
SELECT t1.CODE, CASE WHEN t2.CATEGORY IS NOT NULL THEN t2.CATEGORY WHEN t1.base_category = 1 THEN 100 WHEN t1.base_category = 2 THEN 200 END AS CATEGORY, t3.COLOR FROM -- 自连接生成全量CODE+原始CATEGORY基准组合 (SELECT DISTINCT s1.CODE, s2.CATEGORY AS base_category FROM src_table s1 CROSS JOIN (SELECT DISTINCT CATEGORY FROM src_table) s2) t1 -- 自连接匹配当前CODE是否存在对应原始CATEGORY LEFT JOIN src_table t2 ON t1.CODE = t2.CODE AND t1.base_category = t2.CATEGORY -- 自连接获取每个CODE对应的固定COLOR值 INNER JOIN (SELECT DISTINCT CODE, COLOR FROM src_table) t3 ON t1.CODE = t3.CODE ORDER BY t1.CODE, CATEGORY;
效果验证
- CODE=-1:仅原始存在CATEGORY=3,缺失1和2,输出3、100、200,符合目标
- CODE=18578:原始存在CATEGORY=2、3,缺失1,输出2、3、100,符合目标
- CODE=20032:原始存在CATEGORY=1、2、3,全部保留,符合目标
内容的提问来源于stack exchange,提问作者VSK
相关产品推荐
相关产品推荐

