程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> SqlServer2012中LEAD函數簡單分析,sqlserver2012lead

SqlServer2012中LEAD函數簡單分析,sqlserver2012lead

編輯:MySQL綜合教程

SqlServer2012中LEAD函數簡單分析,sqlserver2012lead


LEAD函數簡單點說,就是把下一行的某列數據提取到當前行來顯示,看示例更能解釋清楚,先看測試用腳本

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


sql server 中 使用lead() over()函數報錯:lead不可以識別的內置函數

LEAD(),OVER():ANSI SQL 2008 standard:關鍵是要ANSI的
 

SQL server中SQL分析函數問題

SQL SERVER 2005以上也有分析函數的,如果是2000,必須有一個參照列,類似id之類的,

要看具體表結構
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved