将seq列的升值中的col_1分组以显示以下示例数据的多列中的注释列中的值:
col_1 | Seq | Comment |
--------------------------|
ABC | 30 | TestC |
ABC | 50 | TestE |
ABC | 80 | TestG |
ABC | 10 | TestA |
ABC | 60 | TestF |
ABC | 20 | TestB |
ABC | 70 | TestF |
ABC | 40 | TestD |
DEF | 20 | TestB |
DEF | 10 | TestA |
GHI | 10 | TestA |
--------------------------|
Expected output of sql should be:
Col_1 | Col_2 | Col_3 | Col_4 | Col_5 | Col_6 | Col_7 | Col_8 |
-------|-------|-------|-------|-------|-------|-------|-------|
ABC | TestA | TestB | TestC | TestD | TestE | TestF | TestG |
DEF | TestA | TestB | | | | | |
GHI | TestA | | | | | | |
-------|-------|-------|-------|-------|-------|-------|-------|
答案 0 :(得分:1)
您可以使用条件聚合和row_number()
:
select col_1,
max(case when seqnum = 1 then comment end) as col_2,
max(case when seqnum = 2 then comment end) as col_3,
max(case when seqnum = 3 then comment end) as col_4,
. . .
from (select t.*,
row_number() over (partition by col_1 order by seq) as seqnum
from t
) t
group by col_1;
答案 1 :(得分:0)
这基本上使用了Gordon的答案中相同的row_number
函数,但使用了PIVOT
子句。
SELECT *
FROM (
SELECT t.COL_1
,t.comments
,row_number() OVER (
PARTITION BY col_1 ORDER BY seq
) AS seqnum
FROM t
) t
PIVOT(MAX(comments) FOR seqnum IN (1 as col_2,2 as col_3,3 as col_4,
4 as col_5,5 as col_6,6 as col_7,
8 as col_8));