如何将单行四列数据转为2*2维度行?求SQL与Informatica方案
单行四列数据转2*2行结构的实现方案
问题说明
输入为单行包含四个字段值的记录(以空格分隔):
| Ram 1000 Sita 2000 |
需要转换为2行2列的结构化数据,预期输出:
| header 1 | header 2 |
|---|---|
| Ram | 1000 |
| Sita | 2000 |
SQL实现方案
MySQL 示例
假设输入表名为source_table,存储合并值的字段为combined_col,通过字符串拆分+UNION ALL生成两行记录:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(combined_col, ' ', 1), ' ', -1) AS `header 1`, SUBSTRING_INDEX(SUBSTRING_INDEX(combined_col, ' ', 2), ' ', -1) AS `header 2` FROM source_table UNION ALL SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(combined_col, ' ', 3), ' ', -1) AS `header 1`, SUBSTRING_INDEX(SUBSTRING_INDEX(combined_col, ' ', 4), ' ', -1) AS `header 2` FROM source_table;
Oracle 示例
使用正则表达式拆分函数REGEXP_SUBSTR实现:
SELECT REGEXP_SUBSTR(combined_col, '[^ ]+', 1, 1) AS "header 1", REGEXP_SUBSTR(combined_col, '[^ ]+', 1, 2) AS "header 2" FROM source_table UNION ALL SELECT REGEXP_SUBSTR(combined_col, '[^ ]+', 1, 3) AS "header 1", REGEXP_SUBSTR(combined_col, '[^ ]+', 1, 4) AS "header 2" FROM source_table;
Informatica PowerCenter实现方案
步骤1:源与Expression转换配置
- 创建源表,定义字段
combined_col(字符串类型)。 - 添加Expression转换,创建4个输出端口用于拆分原始字段:
val1:SUBSTR(combined_col, 1, INSTR(combined_col, ' ', 1, 1)-1)val2:SUBSTR(combined_col, INSTR(combined_col, ' ', 1, 1)+1, INSTR(combined_col, ' ', 1, 2)-INSTR(combined_col, ' ', 1, 1)-1)val3:SUBSTR(combined_col, INSTR(combined_col, ' ', 1, 2)+1, INSTR(combined_col, ' ', 1, 3)-INSTR(combined_col, ' ', 1, 2)-1)val4:SUBSTR(combined_col, INSTR(combined_col, ' ', 1, 3)+1)
步骤2:生成多行记录
添加Router转换,创建两个输出组:
- 组1:无条件输出,将
val1映射到目标字段header 1,val2映射到header 2 - 组2:无条件输出,将
val3映射到目标字段header 1,val4映射到header 2
步骤3:目标表配置
创建目标表,包含header 1和header 2两个字符串字段,将Router的两个输出组均连接到目标表对应端口,运行映射即可得到预期结果。
内容的提问来源于stack exchange,提问作者Vaish
相关产品推荐
相关产品推荐

