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_TABLEREGEXP_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

您需要修改结果数据类型以匹配输入(长度和字符集)