在SQL中选择多个记录作为多个列

时间:2015-03-24 15:52:55

标签: sql oracle select

我的桌子看起来像这样:

ID Name
-------
1  John
1  Mary
1  Jane
2  John 
2  Mary
3  Jane

知道每个ID最多只能包含三个名称,我想使用SELECT语句将其转换为以下内容:

ID Name1 Name2 Name3
--------------------
1  John  Mary  Jane
2  John  Mary
3  Jane

有没有办法在SQL中执行此操作?

2 个答案:

答案 0 :(得分:1)

如果您知道最多有三个名称,则可以使用条件聚合执行此操作:

select id,
       max(case when seqnum = 1 then name end) as name1,
       max(case when seqnum = 2 then name end) as name2,
       max(case when seqnum = 3 then name end) as name3
from (select t.*, row_number() over (partition by id order by name) as seqnum
      from table t
     ) t
group by id;

答案 1 :(得分:0)

使用Oracle,您可以使用PIVOT功能。

但是,你需要首先通过id-name对来排队你的行,然后你可以为你刚刚生成的等级(字面上)执行pivot指令。

要阅读的页面:

相关问题