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