給我排排站好..其餘免談@@|||

由於資料有時候並不會有流水序號可供判定資料的位置,因此就會需要讓他產生流水編號,產生的方法有以下幾種函數,排名函數會傳回資料分割中每個資料列各一個次序值。根據所用的函數而定,有些資料列可能會收到與其他資料列相同的值。排名函數不具決定性。

ROW_NUMBER()  從頭排到尾

RANK()  依據相同的值給予同一編號,但是下次給號會跳號(常用於排名次)

DENSE_RANK() 依據相同的值給予同一編號,但是下次給號不會跳號

NTILE() 依據給予的引數,給予資料列散發到指定數目的群組中,對於每個資料列,NTILE 都會傳回資料列所屬群組的號碼。

 

詳細說明請參閱TechNet

http://technet.microsoft.com/zh-tw/library/ms189798.aspx

 

------以下是範例直接複製到SSMS執行即可-------

--DECLARE @Table,宣告一個變數資料表

DECLARE  @Employee TABLE 

(    EmpId Varchar(10),

    EmpName Varchar(25),

    EmpSalary Numeric(12,0)

)

--Insert sample records,寫入幾筆樣本資料

INSERT INTO @Employee VALUES( 'Emp202', 'Ravi', 2000000)

INSERT INTO @Employee VALUES( 'Emp198', 'Shekar', 678000)

INSERT INTO @Employee VALUES( 'Emp234', 'Karim', 805000)

INSERT INTO @Employee VALUES( 'Emp234', 'Karim', 879000)

INSERT INTO @Employee VALUES( 'Emp234', 'Karim', 2350000)

INSERT INTO @Employee VALUES( 'Emp184', 'John', 975000)

INSERT INTO @Employee VALUES( 'Emp151', 'Suresh', 689000)

INSERT INTO @Employee VALUES( 'Emp151', 'Suresh', 879000)

 

--Query the table,執行語法!

SELECT

ROW_NUMBER() OVER ( ORDER BY EmpId DESC ) AS 依照EmpId排序,

 EmpId, EmpName, EmpSalary

FROM @Employee

 

SELECT

ROW_NUMBER() OVER ( PARTITION BY EmpName ORDER BY EmpId DESC ) AS 依照EmpName群組後排序,

 EmpId, EmpName, EmpSalary

FROM @Employee

 

SELECT

RANK() OVER(ORDER BY EmpId) AS 跳號 ,

 EmpId, EmpName, EmpSalary

FROM @Employee

 

SELECT

DENSE_RANK() OVER(ORDER BY EmpId) AS 不會跳號 ,

 EmpId, EmpName, EmpSalary

FROM @Employee

 

SELECT

NTILE(3) OVER(ORDER BY EmpId) AS 每三列編一號 ,

 EmpId, EmpName, EmpSalary

FROM @Employee

 

PS:很常用的東西但是卻也很常忘記>”<

 

炎龍牙 發表在 痞客邦 PIXNET 留言(0) 人氣()