Sql oracle根据id的记录数将列转换为行

Sql oracle根据id的记录数将列转换为行,sql,oracle,pivot,Sql,Oracle,Pivot,现在,通过对上述查询进行更改,我正在寻找如下内容 rmpmid C_TYPE_ID_EXT C_ID_EXT RANK 1 BEN 988-99 1 1 REGON 988-99 2 1 SIREN 988-99 3 2 BEN 988-99 1 2 REGON

现在,通过对上述查询进行更改,我正在寻找如下内容

rmpmid  C_TYPE_ID_EXT   C_ID_EXT    RANK
1             BEN         988-99      1
1             REGON       988-99      2
1             SIREN       988-99      3
2             BEN         988-99      1
2             REGON       988-99      2
2             SIREN       988-99      3
3             BEN         988-99      1
4             REGON       988-99      1
我试图使用Pivot选项来完成此操作,但找不到解决方案
团队中有人能帮我解决这个问题吗。

您可以通过条件聚合来实现这一点:

rmpmid  type1   id1        type2    id2     type3   id3
1        Ben    988-99     Regon    988-99  siren   988-99
2        Ben    988-99     Regon    988-99  siren   988-99
3        ben    988-99              
4        regon  988-99  

两条注释:您的查询没有rmpmid,尽管结果有。我把它加进去了。其次,您不需要两个级别的行数。内部的应该做你想做的。

如果你展示你尝试过的东西以及为什么它没有产生你想要的东西,这会有所帮助。感谢alex查看我的查询,我尝试了如下选择*从选择C\u类型\u ID\u EXT,C\u ID\u EXT,按I_INTRN顺序按rank1作为秩从选择I_INTRN、C_TYPE_ID_EXT、C_ID_EXT、,分区上的行数按I_INTRN顺序按I_INTRN rank1从dex.dex_ej_rmpm_id PIVOT MIN C_id_EXT作为C_Type_id_EXT的类型在选择C_Type_id_EXT from Type where rank中工作得很好非常感谢Gordon Linoff
rmpmid  type1   id1        type2    id2     type3   id3
1        Ben    988-99     Regon    988-99  siren   988-99
2        Ben    988-99     Regon    988-99  siren   988-99
3        ben    988-99              
4        regon  988-99  
select rmpmid,
       max(case when rank = 1 then C_TYPE_ID_EXT end) as type1,
       max(case when rank = 1 then C_ID_EXT end) as id1,
       max(case when rank = 2 then C_TYPE_ID_EXT end) as type2,
       max(case when rank = 2 then C_ID_EXT end) as id2,
       max(case when rank = 3 then C_TYPE_ID_EXT end) as type3,
       max(case when rank = 3 then C_ID_EXT end) as id3
from (select C_TYPE_ID_EXT, C_ID_EXT, rmpmid,
             row_number() over (partition by I_INTRN order by I_INTRN) as rank
      from dex.dex_ej_rmpm_id
     )
where rank <= 3
group by rmpmid;