teradata中的列到行转换

时间:2015-09-22 15:11:36

标签: sql teradata

我有源表如下

 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,',','')) 但是我无法在第一个,第二个逗号之后获取记录等等。

1 个答案:

答案 0 :(得分:1)

在TD14 +中有两个内置表函数来分割字符串,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

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