Oracle SQL:如何合并n行并在结果中创建其他列?

Oracle SQL:如何合并n行并在结果中创建其他列?,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,表: 我正在寻找输出以下内容的请求: id race 1 elf 1 troll 2 lizard 2 elf 2 human 3 dwarf 如果比较容易的话,可以有n个比赛或给定的最大比赛次数 使用sql查询(而不是pl/sql)是否可以做到这一点?(如果需要特殊功能,则使用oracle)如果希望在简单的选择中执行此操作,则可以使用条件聚合: id race1 race2 race3 1 elf troll 2 lizard elf

表:

我正在寻找输出以下内容的请求:

id race
1  elf
1  troll
2  lizard
2  elf
2  human    
3  dwarf
如果比较容易的话,可以有n个比赛或给定的最大比赛次数


使用sql查询(而不是pl/sql)是否可以做到这一点?(如果需要特殊功能,则使用oracle)

如果希望在简单的
选择中执行此操作,则可以使用条件聚合:

id race1   race2   race3
1  elf     troll   
2  lizard  elf     human
3  dwarf

SQL查询具有固定数量的已定义列。使用动态SQL(
execute immediate
)只能执行您想要的操作。可能重复@GordonLinoff,好吧,假设最多有5场比赛,这是可能的?@KaushikNayak我不是在寻找pl/SQL,而是在寻找SQL请求。我将在问题中更清楚地说明,如果列数未知,那么除非您想要XML输出,否则纯sql解决方案是不可能的。对于固定列,您可以
select id,
       max(case when seqnum = 1 then race end) as race_1,
       max(case when seqnum = 2 then race end) as race_2,
       max(case when seqnum = 3 then race end) as race_3,
       max(case when seqnum = 4 then race end) as race_4,
       max(case when seqnum = 5 then race end) as race_5
from (select t.*,
             row_number() over (partition by id order by id) as seqnum
      from t
     ) t
group by id;