SQL Server 2012中LEAD函數(shù)簡單分析
LEAD函數(shù)簡單點說,就是把下一行的某列數(shù)據(jù)提取到當前行來顯示,看示例更能解釋清楚,先看測試用腳本
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
以上是原始數(shù)據(jù),下邊應(yīng)用LEAD函數(shù),看下怎么把其它行的數(shù)據(jù)提取到當前行顯示的
可以看到,LEAD函數(shù)把ID為2的那一行的LastName值提取到第一行顯示為新列NEXTUser,就這么個功能
下邊這個是間隔兩行提取數(shù)據(jù),就是把第三行的數(shù)據(jù)提取到當前行,其它行以次累推,看圖
這個函數(shù)一共接受三個參數(shù),第一個是表達式,以上示例都使用的字段,還可以是其它有效的表達式,第二個參數(shù)是offset,即間隔多少行取數(shù)據(jù),第三個是默認的間隔,即當沒有指定offset時以此為準
舉個例子,以上述代碼為例
LEAD(LastName,2,0)
當沒有指定那個2的時候,則以間隔0行為準,當有指定那個2的時候則間隔2行取數(shù)據(jù),所以,往往第三個參數(shù)可以不指定,效果是一樣的,如下圖
與LEAD函數(shù)相對應(yīng)的還有一個函數(shù),LAG,看下圖效果
如上圖所示,這個函數(shù)是從上行取數(shù)據(jù),其它間隔參數(shù)的意義一樣,LEAD是從下行取數(shù)據(jù),TAG相反是上行取數(shù)據(jù),寫到這里我就再想,如果指定負數(shù),是不是就可以合并為一個函數(shù)了?試下想法:
報錯,offset參數(shù)不能為負,哥不作評論,,,The End
sql server 中 使用lead() over()函數(shù)報錯:lead不可以識別的內(nèi)置函數(shù)
LEAD(),OVER():ANSI SQL 2008 standard:關(guān)鍵是要ANSI的
SQL server中SQL分析函數(shù)問題
SQL SERVER 2005以上也有分析函數(shù)的,如果是2000,必須有一個參照列,類似id之類的,
要看具體表結(jié)構(gòu)