2016-04-10 180 views
0

需要你的幫助來解決我與轉換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功能也不可用。

任何幫助將是巨大的..

感謝

+0

看起來像一個分析QryLogObjectsV的查詢,你要處理的數據量是多少?你結果怎麼樣? – dnoeth

+0

嗨Dieter,我正在嘗試處理1個月的數據,我正在嘗試生成一個報告,其中每個queryid都有一行,在該行中,我有我的totalampcputime,響應時間以及該queryid訪問的對象。如果我對每個queryid訪問的所有對象都有多行,那麼ampcputime和responsetime將乘以總行數,因此最終結果將不正確。 – SRG

回答

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; 
+0

感謝您的答覆Aritra ..只是一些問題..以下符號表示什麼... 1)temp(我假設這是用於存儲正在處理的數據的表,2)不知道什麼PRIMARY INDEX(parent_id)的意思是,3)FROM ,應該在這裏使用什麼表格4)INNER JOIN rec_test,我找不到這張表 – SRG

+0

@SRG .. yest temp只是我給存儲數據表的一個隨機名。主索引是我在易失性表temp_tbl上定義的索引。對於主索引中的概念,您可以在wiki/google中進行搜索。內部連接部分將test1,我已編輯,這是邏輯的遞歸方面,這有助於獲得您想要的結果。如果這個答案有助於實現你的目標,請接受它。 –

+0

非常感謝Aritra,會給它一個嘗試,只是最後一個問題..你在遞歸查詢中提到了SELECT queryid,databasename,tablename, 從代表什麼? – SRG