(SQL)使用秩覆盖将行转换为列只会返回两个相同项中的一个

(SQL)使用秩覆盖将行转换为列只会返回两个相同项中的一个,sql,transpose,rank,Sql,Transpose,Rank,我正在使用oracle embedded HR.JOB\u详细信息表。 我希望在将departmet_id和job_id列的行转换为列后显示所有条目,但对于一个值,department_id=50的ST_CLERK有两个条目,但在最终结果中只出现一次 子查询查询特定trasnposed列的最小值-这很清楚。但我无法找到同时返回这两个事件的解决方案 源表: 使用的查询: select a, b, c, d, e, f from ( select min("20") a, min("50") b,

我正在使用oracle embedded HR.JOB\u详细信息表。 我希望在将departmet_id和job_id列的行转换为列后显示所有条目,但对于一个值,department_id=50的ST_CLERK有两个条目,但在最终结果中只出现一次

子查询查询特定trasnposed列的最小值-这很清楚。但我无法找到同时返回这两个事件的解决方案

源表:

使用的查询:

select a, b, c, d, e, f from (
select min("20") a, min("50") b, min ("60") c, min ("80") d, min("90") e, min("110") f from (
      select 
case when department_id=20 then job_id end as "20" ,
case when department_id=50 then job_id end as "50" ,
case when department_id=60 then job_id end as "60" ,
case when department_id=80 then job_id end as "80" ,
case when department_id=90 then job_id end as "90" ,
case when department_id=110 then job_id end as "110",
rank() over (partition by department_id order by job_id) as row_num
from job_history) x
group by row_num);
结果:

请改用行号:

rank为重复项返回相同的值,group by将组合成一行。row_number保证返回不同的值,因此它们不会合并

row_number() over (partition by department_id order by job_id) as row_num