Oracle 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

这是我的第一篇帖子,如果有人在别处回复,我表示歉意。 我希望通过SQL做一些简单的透视。我有:

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)
 )