Sql 将表与下一行自联接
我试图在表本身上联接一个表,但在下一行(按Empno排序) 示例数据: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 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