2016-04-18 11 views
0

繰り返し列の値に基づいて各行を複製するクエリを作成します。入力されたテーブルデータは値を複製する方法

出力データにすぐ
Products, Repeat 
---------------- 
A,   3 
B,   5 
C,   2 

以下のようにのように見える、製品Aは、Bが5回繰り返されるべきであり、Cは2回繰り返さなければならない、3回繰り返さなければなりません。出力は以下のようになります

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はactulaデータに依存してCPU

の多くを必要とするかもしれないが、連続した値 ON n BETWEEN 1 AND Repeatで数テーブルに JOINだろうが、

#2:EXPAND ONPERIODための独自の構文、BUを乱用:再帰を選択し、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です最も効率的です:

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

再帰クエリを使用して説明できますか? –

+0

@vaibhavkumar:私はちょうど私の答えにそれを加えました。 – dnoeth

+0

ヘルプありがとう@dnoeth –

関連する問題