我的桌子看起来像这样:
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中执行此操作?
答案 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指令。
要阅读的页面: