2016-04-18 66 views
0

我想編寫一個查詢以基於重複列中的值複製每一行。輸入表數據看起來像如下如何複製值

Products, Repeat 
---------------- 
A,   3 
B,   5 
C,   2 

現在,在輸出數據,產品A應被重複3次,B應該被重複5次和C應重複2次。輸出將如下所示

Products, Repeat 
---------------- 
A,  3 
A,  3 
A,  3 
B,  5 
B,  5 
B,  5 
B,  5 
B,  5 
C,  2 
C,  2 

任何機構可以告訴我如何在Teradata中完成它?

回答

0

有幾種方法可以得到這樣的結果:

#1:古典SQL將是一個JOIN與數表順序值ON n BETWEEN 1 AND Repeat,取決於actula數據可能需要大量的CPU

#2:一個遞歸選擇,effcient只要Repeat是一個小數目

WITH RECURSIVE cte AS 
(
    SELECT t.*, repeat - 1 AS lvl -- counting down to zero 
    FROM tab AS t 
    WHERE repeat > 0 
    UNION ALL 
    SELECT Products, repeat, lvl-1 FROM cte 
    WHERE lvl > 0 
) 
SELECT Products, repeat_ 
FROM cte 

#3:濫用EXPAND ON,專有語法PERIOD,BU t最有效率:

SELECT * 
FROM tab 
EXPAND ON PERIOD(DATE '2000-01-01', DATE '2000-01-01' + repeat_) AS pd 
+0

可以使用遞歸查詢解釋它嗎? –

+0

@vaibhavkumar:我剛添加到我的答案。 – dnoeth

+0

感謝@dnoeth的幫助 –