teradata 中的列到行的转换
Column to row conversion in teradata
我有如下来源table
PROGRAM_ID SOURCE_TABLE
1 A,B
2 C,D,E
3 E
4 X,Y,Z,H,B
我想要以下格式的目标
PROGRAM_ID SOURCE_TABLE
1 A
1 B
2 C
2 D
2 E
3 E
4 X
4 Y
4 Z
4 H
4 B
我在使用以下查询的源查询中获取逗号数
CHARACTER(SOURCE_TABLE) - 字符(oreplace(SOURCE_TABLE,',',''))
但我无法在第一个、第二个逗号等之后获取记录。
在TD14+中有两个内置的table函数来分割字符串,STRTOK_SPLIT_TO_TABLE
和REGEXP_SPLIT_TO_TABLE
:
with cte as
(
select PROGRAM_ID, SOURCE_TABLE
from tab
)
SELECT *
FROM TABLE (STRTOK_SPLIT_TO_TABLE(cte.PROGRAM_ID, cte.SOURCE_TABLE, ',')
RETURNS (PROGRAM_ID INTEGER,
tokennum INTEGER,
SOURCE_TABLE VARCHAR(128) CHARACTER SET UNICODE)
) AS d
您需要修改结果数据类型以匹配输入(长度和字符集)
我有如下来源table
PROGRAM_ID SOURCE_TABLE
1 A,B
2 C,D,E
3 E
4 X,Y,Z,H,B
我想要以下格式的目标
PROGRAM_ID SOURCE_TABLE
1 A
1 B
2 C
2 D
2 E
3 E
4 X
4 Y
4 Z
4 H
4 B
我在使用以下查询的源查询中获取逗号数 CHARACTER(SOURCE_TABLE) - 字符(oreplace(SOURCE_TABLE,',','')) 但我无法在第一个、第二个逗号等之后获取记录。
在TD14+中有两个内置的table函数来分割字符串,STRTOK_SPLIT_TO_TABLE
和REGEXP_SPLIT_TO_TABLE
:
with cte as
(
select PROGRAM_ID, SOURCE_TABLE
from tab
)
SELECT *
FROM TABLE (STRTOK_SPLIT_TO_TABLE(cte.PROGRAM_ID, cte.SOURCE_TABLE, ',')
RETURNS (PROGRAM_ID INTEGER,
tokennum INTEGER,
SOURCE_TABLE VARCHAR(128) CHARACTER SET UNICODE)
) AS d
您需要修改结果数据类型以匹配输入(长度和字符集)