将teradata表列转换为逗号分隔值

时间:2016-04-10 02:46:14

标签: teradata

需要你的帮助来解决我正在努力解决的特定问题

我有一张teradata表,如下所示。

Queryid Databasename    Tablename
101     DB1             TB1
101     DB2             TB2
101     DB1             TB3
102     DB3             TB3
102     DB4             TB4
.       .               .
.       .               .
.       .               .

我需要以下格式的输出。

Queryid    Newcol
101        DB1.TB1,DB2.TB2,DB1.TB3
102        DB3.TB3,DB4.TB4
.          .......   
.          .......

我使用的是TD13.10并且没有XML服务,而且TDStats功能也不可用。

任何帮助都是巨大的......

由于

1 个答案:

答案 0 :(得分:0)

您可以使用递归。虽然你必须使用另一个表来存储和使用递归使用该表来通过rownumber连接值。

CREATE VOLATILE TABLE temp_tbl AS (
 SELECT
   queryid                     
   ,databasename ||'.'||tablename                                                           
   ,ROW_NUMBER() OVER (PARTITION BY queryid ORDER BY queryid) AS rnk
FROM temp
) WITH DATA PRIMARY INDEX(parent_id) ON COMMIT PRESERVE ROWS

WITH RECURSIVE test1(query,databasename,tablename,LVL)


AS
   (
    SELECT queryid,databasename,tablename, 1
    FROM <tablename>
    WHERE rnk = 1
    UNION ALL
    SELECT  queryid, TRIM(databasename) || ', ' || TRIM(tablename),LVL+1
    FROM temp_tbl INNER JOIN test1
    ON queryid = query
   AND temp_tbl.rn = test1.lvl+1
   )
   SELECT query,databasename,tablename,LVL
   FROM test1
QUALIFY RANK() OVER(PARTITION BY query ORDER BY LVL DESC) = 1;