SqlServer2012中LEAD函数简单分析

SQL SERVER 2012 T-SQL新增几个聚合函数: FIRST_VALUE LAST_VALUE LEAD LAG,今天我们首先来简单分析下LEAD,希望对大家有所帮助,能够尽快熟悉这个聚合函数

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

SqlServer2012中LEAD函数简单分析_第1张图片

以上是原始数据,下边应用LEAD函数,看下怎么把其它行的数据提取到当前行显示的

SqlServer2012中LEAD函数简单分析_第2张图片

可以看到,LEAD函数把ID为2的那一行的LastName值提取到第一行显示为新列NEXTUser,就这么个功能

下边这个是间隔两行提取数据,就是把第三行的数据提取到当前行,其它行以次累推,看图

SqlServer2012中LEAD函数简单分析_第3张图片

这个函数一共接受三个参数,第一个是表达式,以上示例都使用的字段,还可以是其它有效的表达式,第二个参数是offset,即间隔多少行取数据,第三个是默认的间隔,即当没有指定offset时以此为准

举个例子,以上述代码为例

LEAD(LastName,2,0)

当没有指定那个2的时候,则以间隔0行为准,当有指定那个2的时候则间隔2行取数据,所以,往往第三个参数可以不指定,效果是一样的,如下图

SqlServer2012中LEAD函数简单分析_第4张图片

与LEAD函数相对应的还有一个函数,LAG,看下图效果

SqlServer2012中LEAD函数简单分析_第5张图片

如上图所示,这个函数是从上行取数据,其它间隔参数的意义一样,LEAD是从下行取数据,TAG相反是上行取数据,写到这里我就再想,如果指定负数,是不是就可以合并为一个函数了?试下想法:

SqlServer2012中LEAD函数简单分析_第6张图片

报错,offset参数不能为负,哥不作评论,,,The End


上文来自:http://www.jb51.net/article/54336.htm


你可能感兴趣的:(sql,数据库,server,函数)