2017-11-21 14 views
1

に単一の行に2行を結合するにはどうすればSQLによって返さ下記のフォームで結果セットを持っている:Teradataの

ID Key 
1 A 
2 A 
3 A 

今私の要件は以下の形式でデータを表示することです:

Key ID1 ID2 ID3 
A 1 2 3 

これはどのようにSQLを構築するのですか?

+1

グーグルピボットテラを。 – jarlh

+0

クエリを書くときにいくつの列が表示されますか?これは常に3つの値ですか?その場合は、PIVOTまたは条件付き集計を使用できます。通常、このような表示は、SQLではなく、アプリやウェブサイトで行うことです。 –

+0

このように表示する必要がある列IDは1つだけです。 –

答えて

2

Aウィンドウ表示集約ベースのソリューション説明:

SELECT 
    key, 
    -- value from 1st row = current row 
    ID AS ID1, 
    -- value from next row, similar to LEAD(ID, 1) Over (PARTITION BY Key ORDER BY ID) 
    Min(ID) 
    Over (PARTITION BY Key 
     ORDER BY ID 
     ROWS BETWEEN 1 Following AND 1 Following) AS ID2 , 
    -- value from 3rd row 
    Min(ID) 
    Over (PARTITION BY Key 
     ORDER BY ID 
     ROWS BETWEEN 2 Following AND 2 Following) AS ID3 
FROM mytable 
QUALIFY -- only return the 1st row 
    Row_Number() 
    Over (PARTITION BY key 
     ORDER BY ID) = 1 
0

のTeradata 14.10はPIVOT機能を持っているし、(コメントで述べたように)すべての固有keyのために、3つ以下IDsがあることを想定していないとして、あなたはあなたの希望を取得するために、以下のようrow_number()aggregate機能を使用することができます結果。

SELECT 
    key1, 
    MAX(CASE WHEN rn = 1 THEN ID END) AS ID1, 
    MAX(CASE WHEN rn = 2 THEN ID END) AS ID2, 
    MAX(CASE WHEN rn = 3 THEN ID END) AS ID3 
    FROM 
    (SELECT 
    t.*, 
    ROW_NUMBER() OVER (PARTITION BY key1 ORDER BY ID) AS rn 
    FROM table1 t) t 
    GROUP BY key1; 

結果:単一STATSステップと

+------------+-----+-----+-----+ 
| key1 | id1 | id2 | id3 | 
+------------+-----+-----+-----+ 
| A   | 1 | 2 | 3 | 
+------------+-----+-----+-----+ 

DEMO