に単一の行に2行を結合するにはどうすればSQLによって返さ下記のフォームで結果セットを持っている:Teradataの
ID Key
1 A
2 A
3 A
今私の要件は以下の形式でデータを表示することです:
Key ID1 ID2 ID3
A 1 2 3
これはどのようにSQLを構築するのですか?
に単一の行に2行を結合するにはどうすればSQLによって返さ下記のフォームで結果セットを持っている:Teradataの
ID Key
1 A
2 A
3 A
今私の要件は以下の形式でデータを表示することです:
Key ID1 ID2 ID3
A 1 2 3
これはどのようにSQLを構築するのですか?
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
の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 |
+------------+-----+-----+-----+
グーグルピボットテラを。 – jarlh
クエリを書くときにいくつの列が表示されますか?これは常に3つの値ですか?その場合は、PIVOTまたは条件付き集計を使用できます。通常、このような表示は、SQLではなく、アプリやウェブサイトで行うことです。 –
このように表示する必要がある列IDは1つだけです。 –