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