oracle 如何 添加 与 同一 人 下 一 个 职务 的 栏目 ? [ 重复 ]

7d7tgy0s  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(98)

此问题在此处已有答案

Comparing current row and next row in oracle sql(2个答案)
conditionally displaying rows based on values in next row - SQL(3个答案)
13个小时前关门了。
我有这张表:
| 员工编号|工作|年份|
| - -|- -|- -|
| 一一一|护理人员|小行星2022|
| 一一一|医生|小行星2021|
| 一一一|学生|小行星2020|
| 二百二十二|侍者|小行星2022|
| 二百二十二|学生|小行星2021|
| 三百三十三|护理人员|小行星2022|
我想再添加一列,显示同一员工的下一份工作。结果如下:
| 员工编号|工作|年份|下一作业|
| - -|- -|- -|- -|
| 一一一|护理人员|小行星2022|上一作业|
| 一一一|医生|小行星2021|护理人员|
| 一一一|学生|小行星2020|医生|
| 二百二十二|侍者|小行星2022|上一作业|
| 二百二十二|学生|小行星2021|侍者|
| 三百三十三|护理人员|小行星2022|上一作业|

9o685dep

9o685dep1#

假设这是您的表:

SQL> select * from employee order by empno, year desc;

     EMPNO JOB             YEAR NEXT_JOB
---------- --------- ---------- --------------------
       111 paramedic       2022
       111 doctor          2021
       111 student         2020
       222 waiter          2022
       222 student         2021
       333 nurse           2022

6 rows selected.

使用LEAD分析函数更新next_job

SQL> merge into employee a
  2    using (select empno,
  3                  year,
  4                  lead(job) over (partition by empno order by year) next_job
  5           from employee
  6          ) b
  7    on (a.empno = b.empno and a.year = b.year)
  8    when matched then update set
  9      a.next_job = b.next_job;

6 rows merged.

结果:

SQL> select * from employee order by empno, year desc;

     EMPNO JOB             YEAR NEXT_JOB
---------- --------- ---------- --------------------
       111 paramedic       2022
       111 doctor          2021 paramedic
       111 student         2020 doctor
       222 waiter          2022
       222 student         2021 waiter
       333 nurse           2022

6 rows selected.

SQL>
abithluo

abithluo2#

您可以使用窗口函数LAG进行此操作

SELECT
"employee number", "job", "year",
COALESCE(LAG("job") OVER(PARTITION BY "employee number" ORDER BY "year" DESC),' ') As Last_Job
FROM table1

| 员工编号|工作|年份|最后作业|
| - -|- -|- -|- -|
| 一一一|护理人员|小行星2022| |
| 一一一|医生|小行星2021|护理人员|
| 一一一|学生|小行星2020|医生|
| 二百二十二|侍者|小行星2022| |
| 二百二十二|学生|小行星2021|侍者|
| 三百三十三|护理人员|小行星2022| |
fiddle

相关问题