Oracle 19中如何用Pivot实现job_id与salary成对的多列行转列
Oracle 19c实现按人员分组的岗位-薪资行转列
可以实现你要的格式,核心思路是先给每个人员的岗位分配序号,再通过PIVOT同时转置岗位和薪资字段。具体步骤如下:
- 给每个
person_id下的岗位按顺序生成序号(这里按job_id排序,你也可以根据实际需求调整排序规则) - 利用
PIVOT将序号对应的job_id和salary分别转成job_n和salary_n列
完整SQL代码如下:
WITH ranked_jobs AS ( SELECT person_id, job_id, salary, ROW_NUMBER() OVER(PARTITION BY person_id ORDER BY job_id) AS rn FROM tab1 ) SELECT person_id, job_1, salary_1, job_2, salary_2, job_3, salary_3, job_4, salary_4, job_5, salary_5 FROM ranked_jobs PIVOT ( MAX(job_id) AS job, MAX(salary) AS salary FOR rn IN (1 AS 1, 2 AS 2, 3 AS 3, 4 AS 4, 5 AS 5) ) ORDER BY person_id;
代码说明
ranked_jobs子查询:给每个人员的岗位分配唯一序号rn,确保同一人员的岗位按顺序排列PIVOT子句:针对每个序号rn,分别聚合job_id和salary(因为同一person_id+rn唯一,用MAX/MIN都可以),生成对应的job_n和salary_n列- 最后选择最多5组
job+salary列,覆盖你说的每人最多5个岗位的情况,多余的列会显示null
执行这段代码后,就能得到你预期的输出格式。
内容的提问来源于stack exchange,提问作者ORA20001
相关产品推荐
相关产品推荐

