當您輸入電子信箱、訂閱本公司之「電子報」時,我們會向您蒐集、處理、利用的個資為您的「電子信箱」以及「提交日期」,當您輸入電子信箱並送出時,即表示您同意我們使用您的個資,為保障您的權益,關於更多相關政策更新資訊,請務必閱讀我們的「 隱私權政策 」、「 使用條款 」及「 免責聲明 」。如您不同意本網站之「隱私權政策」、「使用條款」及「 免責聲明」,您可以隨時「 取消訂閱 」,謝謝您。

[ ProductID ] [ int ] NOT NULL,

[ ProductName ] [ nvarchar ] ( 40 ) NOT NULL,

[Quantity] [ smallint ] NOT NULL,

[ UnitPrice ] [money] NOT NULL

CONSTRAINT [ PK_Orders ] PRIMARY KEY CLUSTERED

[ ProductID ] ASC

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 100 , '香蕉' , 100 , 10 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 101 , '芭樂' , 200 , 15 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 102 , '柳丁' , 200 , 15 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 103 , '奇異果' , 100 , 20 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 104 , '蘋果' , 100 , 25 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 105 , '梨子' , 200 , 30 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 106 , '草莓' , 300 , 33 )

INSERT INTO [Products] ( ProductID , ProductName , Quantity , UnitPrice ) VALUES ( 107 , '櫻桃' , 500 , 40 )

3 . 實作 說明

(1) ROW_NUMBER():

USE Demo

SELECT * ,ROW_NUMBER() OVER(ORDER BY UnitPrice ) AS 單價排名

FROM Products

執行結果:當單價相同時,排序序號不會重覆

(2) Rank()

USE Demo

SELECT * ,RANK() OVER(ORDER BY UnitPrice ) AS 單價排名

FROM Products

執行結果:當單價相同時,排序序號會重覆, 但若有兩個排序為2的,下一個

排序是從4開始

(3) DENSE_RANK():

USE Demo

SELECT * ,DENSE_RANK() OVER(ORDER BY UnitPrice ) AS 單價排名

FROM Products

執行結果:當單價相同時,排序序號會重覆,但若有兩個排序為2的,下一個排

序則從3開始

(4) NTitle (N)

USE Demo

SELECT * ,NTILE(4) OVER(ORDER BY UnitPrice ) AS 單價排名

FROM Products

執行結果: 根據 Products 中的 單價 平均 分成四等分

(5)排序函數除了可排序外,還可配合做指定範圍的查詢,例如查詢單價排名的第5

USE Demo;

WITH TEMP (產品編號,產品名稱,數量,單價,單價排名)

SELECT * ,ROW_NUMBER() OVER(ORDER BY UnitPrice ) AS 單價排名

FROM Products

SELECT * FROM TEMP WHERE 單價排名 BETWEEN 5 AND 8

執行結果:

4 . 結論

SQL Server 2005關於排序方面新增四個函數,分別如下:

Row_Number ()

排序序號有連續,序號不可並列

Rank()

排序序號不連續,序號可並列

Dense_Rank ()

排序序號有連續,序號可並列

NTitle (N)

先進行排序,再將結果分為N等分