【问题标题】:Column to row conversion in teradatateradata 中的列到行转换
【发布时间】:2015-12-19 15:33:43
【问题描述】:

我有如下源表

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

【问题讨论】:

  • 为什么它得到负面评价?有什么具体原因吗?

标签: sql teradata


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2018-10-03
    • 2019-06-26
    • 2021-09-15
    • 1970-01-01
    • 2020-09-21
    • 2016-11-19
    • 2018-12-21
    • 2020-11-30
    相关资源
    最近更新 更多