Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将表与下一行自联接_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将表与下一行自联接

Sql 将表与下一行自联接,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图在表本身上联接一个表,但在下一行(按Empno排序) 示例数据: Empno Work_hours Max_Hours Empno --------------------------------- 1 5 7 3 6 12 4 14 16 我需要将每个员工的数据与下一个员工的数据进行比较 我需要这样的结果: Empno Work_hours Max_hours Empno Wo

我试图在表本身上联接一个表,但在下一行(按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中工作,使用
行编号()
尝试了多种方法,但无法获得上述结果。

使用
lead()


这将返回正确的输出

资料

质疑

输出

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

“下一张唱片”是什么意思?一个表由没有任何顺序的行组成。虽然可以这样做,但它提出了很多问题,例如这些信息对您有何用处?请提供您尝试执行的分析的一些背景信息,可能有一个更简单的解决方案注意,Gordon在您将问题从“下一条记录”更新为“下一行(按Empno排序)”之前写了这篇文章。因此,您需要将三个
orderby
语句更改为
orderby Empno
。这是第一个答案,对原始问题来说是合理的,但@SteveC的答案(似乎是这个答案的副本和更新版)更适合更新后的问题。@JcostKaal。你不接受这个答案有什么原因吗,特别是在我根据你问题的变化修正了它之后。对不起,我不是有意建议你改变这个被接受的答案。取而代之的是,使用Gordon的,但要注意所需的额外更改。
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