-3

我试图加入一个表本身,但在下一行(按 Empno 排序)。

示例数据:

Empno  Work_hours  Max_Hours Empno
---------------------------------
1       5            7
3       6           12
4      14           16

我需要将每个员工的数据与下一个员工进行比较。

我需要这样的结果:

Empno  Work_hours  Max_hours  Empno   Work_hours   Max_hours
-------------------------------------------------------------
1       5            7         3        6           12
3       6           12         4       14           16
4      14           16         NULL    NULL         NULL

我在 SQL Server 中工作,我尝试了多种使用方法ROW_NUMBER(),但我无法得到如上所述的结果。

4

2 回答 2

2

使用lead()

select t.*,
       lead(empno) over (order by empno),
       lead(work_hours) over (order by empno),
       lead(max_hours) over (order by empno)
from t
于 2020-10-18T15:32:15.063 回答
1

这将返回正确的输出。

数据

drop table if exists #tTable
go
create table #tTable(
  Empno         int,
  Work_hours    int,
  Max_Hours     int);

insert into #tTable(Empno, Work_hours, Max_Hours) values
(1, 5, 7),
(3, 6, 12),
(4, 14, 16);

询问

select t.*,
       lead(empno) over (order by Empno) Lead_Empno,
       lead(work_hours) over (order by Empno) Lead_Work_hours,
       lead(max_hours) over (order by Empno) Lead_Max_Hours
from #tTable t;

输出

Empno   Work_hours  Max_Hours   Lead_Empno  Lead_Work_hours Lead_Max_Hours
1       5           7           3           6               12
3       6           12          4           14              16
4       14          16          NULL        NULL            NULL
于 2020-10-18T15:42:26.830 回答