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