LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
DECLARE @TestData TABLE ( ID INT IDENTITY(1,1), Department VARCHAR (20), LastName VARCHAR (20), Rate FLOAT ) INSERT INTO @TestData(Department,LastName,Rate) SELECT 'Document Control' , 'Arifin' ,17.7885 UNION ALL SELECT 'Document Control' , 'Norred' ,16.8269 UNION ALL SELECT 'Document Control' , 'Kharatishvili' ,16.8269 UNION ALL SELECT 'Information Services' , 'Chai' ,10.25 UNION ALL SELECT 'Information Services' , 'Berge' ,10.25 UNION ALL SELECT 'Information Services' , 'Trenary' ,50.4808 UNION ALL SELECT 'Information Services' , 'Conroy' ,39.6635 UNION ALL SELECT 'Information Services' , 'Ajenstat' ,38.4615 UNION ALL SELECT 'Information Services' , 'Wilson' ,38.4615 UNION ALL SELECT 'Information Services' , 'Connelly' ,32.4519 UNION ALL SELECT 'Information Services' , 'Meyyappan' ,32.4519 SELECT * FROM @TestData |
以上是原始数据,下边应用LEAD函数,看下怎么把其它行的数据提取到当前行显示的
可以看到,LEAD函数把ID为2的那一行的LastName值提取到第一行显示为新列NEXTUser,就这么个功能
下边这个是间隔两行提取数据,就是把第三行的数据提取到当前行,其它行以次累推,看图
这个函数一共接受三个参数,第一个是表达式,以上示例都使用的字段,还可以是其它有效的表达式,第二个参数是offset,即间隔多少行取数据,第三个是默认的间隔,即当没有指定offset时以此为准
举个例子,以上述代码为例
LEAD(LastName,2,0)
当没有指定那个2的时候,则以间隔0行为准,当有指定那个2的时候则间隔2行取数据,所以,往往第三个参数可以不指定,效果是一样的,如下图
与LEAD函数相对应的还有一个函数,LAG,看下图效果
如上图所示,这个函数是从上行取数据,其它间隔参数的意义一样,LEAD是从下行取数据,TAG相反是上行取数据,写到这里我就再想,如果指定负数,是不是就可以合并为一个函数了?试下想法:
报错,offset参数不能为负,哥不作评论,,,The End