Teradata SQL拆分含列名与值的冒号分隔字符串并实现行转列
Teradata 拆分冒号键值对实现行转列SQL方案
现有Teradata数据库中的t1表存储冒号分隔的键值对数据,Value字段内容为「列名:对应值」格式,需拆分后将键作为输出列名、对应值作为列内容输出。
样例输入表(t1)
| ID | Value |
|---|---|
| 1 | animal:horse |
| 2 | animal:cow |
| 3 | bird:parrot |
| 4 | bird:sparrow |
期望输出格式
| ID | animal | bird |
|---|---|---|
| 1 | horse | |
| 2 | cow | |
| 3 | parrot | |
| 4 | sparrow |
实现代码
SELECT ID, MAX(CASE WHEN key = 'animal' THEN val ELSE '' END) AS animal, MAX(CASE WHEN key = 'bird' THEN val ELSE '' END) AS bird FROM ( -- 拆分Value字段为键、值两部分 SELECT ID, STRTOK(Value, ':', 1) AS key, STRTOK(Value, ':', 2) AS val FROM t1 ) t GROUP BY ID ORDER BY ID;
若使用的Teradata版本不支持
STRTOK函数,可替换拆分逻辑为INSTR+SUBSTRING组合:SUBSTRING(Value FROM 1 FOR INSTR(Value,':')-1) AS key, SUBSTRING(Value FROM INSTR(Value,':')+1) AS val
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

