Oracle11g 透视每个id的前五个结果

Oracle11g 透视每个id的前五个结果,oracle11g,pivot,Oracle11g,Pivot,我正在制作一份报告,展示学生及其参与的活动 报告请求每行需要一名学生。“活动”表每行有一个活动。我想做一个支点,但找不到这样做的方法。我不知道我可以关注哪些专栏,并且有五种以上的活动类型 在此方面的任何帮助都将不胜感激 示例表: aaron football aaron soccer aaron baseball aaron tennis aaron basketball aaron volleyball steve basketball steve

我正在制作一份报告,展示学生及其参与的活动

报告请求每行需要一名学生。“活动”表每行有一个活动。我想做一个支点,但找不到这样做的方法。我不知道我可以关注哪些专栏,并且有五种以上的活动类型

在此方面的任何帮助都将不胜感激

示例表:

aaron    football
aaron    soccer
aaron    baseball
aaron    tennis
aaron    basketball
aaron    volleyball
steve    basketball
steve    swimming
示例输出:

 aaron    football    soccer    baseball    tennis    basketball
 steve    basketball  swimming

编辑:使用Oracle 11g,您必须为每项运动指定排名,然后应用

Oracle 11g R2架构设置

create table myt(
player varchar2(10),
sport varchar(20)
);

insert into myt values('aaron',  'football');
insert into myt values('aaron',  'soccer');
insert into myt values('aaron',  'baseball');
insert into myt values('aaron',  'tennis');
insert into myt values('aaron',  'basketball');
insert into myt values('aaron',  'volleyball');
insert into myt values('steve',  'basketball');
insert into myt values('steve',  'swimming');

with x(player, sport, r) as (
  select player, sport, row_number() over (partition by player order by null) r
  from myt
  )
select * from x
pivot(max(sport) for r in (
                1 as first, 
                2 as second, 
                3 as third, 
                4 as fourth, 
                5 as fifth
                          )
      )
| PLAYER |      FIRST |   SECOND |    THIRD | FOURTH |      FIFTH |
|--------|------------|----------|----------|--------|------------|
|  aaron |   football |   soccer | baseball | tennis | volleyball |
|  steve | basketball | swimming |   (null) | (null) |     (null) |

create table myt(
player varchar2(10),
sport varchar(20)
);

insert into myt values('aaron',  'football');
insert into myt values('aaron',  'soccer');
insert into myt values('aaron',  'baseball');
insert into myt values('aaron',  'tennis');
insert into myt values('aaron',  'basketball');
insert into myt values('aaron',  'volleyball');
insert into myt values('steve',  'basketball');
insert into myt values('steve',  'swimming');

with x(player, sport, r) as (
  select player, sport, row_number() over (partition by player order by null) r
  from myt
  )
select * from x
pivot(max(sport) for r in (
                1 as first, 
                2 as second, 
                3 as third, 
                4 as fourth, 
                5 as fifth
                          )
      )
| PLAYER |      FIRST |   SECOND |    THIRD | FOURTH |      FIFTH |
|--------|------------|----------|----------|--------|------------|
|  aaron |   football |   soccer | baseball | tennis | volleyball |
|  steve | basketball | swimming |   (null) | (null) |     (null) |

听起来有点像,但我不确定你会如何选择哪五项活动,或者如何订购它们——或者这不重要吗?这就是我遇到的问题。我为其制作报告的用户要求“前五个”,因此我认为顺序无关紧要。这可能正是我想要的问题/答案。谢谢这正是我需要的。非常感谢。