如何在Teradata中将2行组合成单行

时间:2017-11-21 14:00:35

标签: sql teradata

我有一个SQL返回的下面提到的结果集:

ID   Key
1    A 
2    A
3    A

现在我的要求是以下面的形式显示数据:

Key ID1 ID2 ID3
A   1   2   3

如何为此构建SQL?

2 个答案:

答案 0 :(得分:2)

基于窗口聚合的解决方案,在Explain中具有单个STATS步骤:

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

答案 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;

<强>结果:

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

<强> DEMO