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;