Oracle SQL。简单枢轴
这是我的第一篇帖子,如果有人在别处回复,我表示歉意。 我希望通过SQL做一些简单的透视。我有:Oracle SQL。简单枢轴,sql,oracle,Sql,Oracle,这是我的第一篇帖子,如果有人在别处回复,我表示歉意。 我希望通过SQL做一些简单的透视。我有: PersID PersItem 1 apple 1 orange 2 peach 2 mango 2 grape 我想: PersID PersItem PersItem PersItem 1 apple orange nu
PersID PersItem
1 apple
1 orange
2 peach
2 mango
2 grape
我想:
PersID PersItem PersItem PersItem
1 apple orange null
2 peach mango grape
编辑:假设perItem的#不固定。谢谢你的回答 如果需要三列,可以将条件聚合与
行数()一起使用。
:
但是,我不建议为每个项目创建单独的列。您可以将它们连接在一起:
select persid,
listagg(persitem, ',') within group (order by persitem) as items
from t
group by persid;
若最大项目的数量是固定的,那个么您可以使用静态枢轴,如下所示。如果要在共享时在输出中定义列别名,请使用Query#2 架构和插入语句:
create table mytable( PersID int, PersItem varchar(50));
insert into mytable values(1,'apple');
insert into mytable values(1,'orange');
insert into mytable values(2,'peach');
insert into mytable values(2,'mango');
insert into mytable values(2,'grape');
问题#1:
输出:
波斯
1.
2.
3.
1.
苹果
橙色
create table mytable( PersID int, PersItem varchar(50));
insert into mytable values(1,'apple');
insert into mytable values(1,'orange');
insert into mytable values(2,'peach');
insert into mytable values(2,'mango');
insert into mytable values(2,'grape');
select * from
(select PersID,persitem,row_number()over(partition by persid order by rownum) rn from mytable)
pivot
(
max(persItem) for rn in (1,2,3)
)