You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19中如何用Pivot实现job_id与salary成对的多列行转列

Oracle 19c实现按人员分组的岗位-薪资行转列

可以实现你要的格式,核心思路是先给每个人员的岗位分配序号,再通过PIVOT同时转置岗位和薪资字段。具体步骤如下:

  1. 给每个person_id下的岗位按顺序生成序号(这里按job_id排序,你也可以根据实际需求调整排序规则)
  2. 利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:05:16