使用排名和數據列集函式

已完成

排名和數據列集函式不是純量函式,因為它們不會傳回單一值。 這些函式接受一組數據列做為輸入,並傳回一組數據列做為輸出。

次序函數

排名函數可讓您對使用者定義的數據列集執行計算。 這些函式包括排名、位移、匯總和分佈函式。

此範例會使用 RANK 函式,根據 ListPrice 計算排名,最高價格排名為 1:

SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;

查詢結果可能如下所示:

ProductID

名稱

ListPrice

依價格排序

749

Road-150 Red, 62

3578.27

1

750

Road-150 Red, 44

3578.27

1

751

Road-150 紅色, 48

3578.27

1

771

Mountain-100 Silver, 38

3399.99

4

772

Mountain-100 Silver, 42

3399.99

4

775

Mountain-100 Black, 38

3374.99

6

...

...

...

...

OVER

您可以使用 OVER 子句來定義資料分割或資料內的群組。 例如,下列查詢會擴充前一個範例,以計算每個類別內產品的價格型排名。

SELECT c.Name AS Category, p.Name AS Product, ListPrice,
  RANK() OVER(PARTITION BY c.Name ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
JOIN Production.ProductCategory AS c
ON p.ProductCategoryID = c.ProductcategoryID
ORDER BY Category, RankByPrice;

此查詢的結果可能如下所示:

類別

產品

ListPrice

依價格排序

Bib-Shorts

男子連身短褲 (S)

89.99

1

Bib-Shorts

男子吊帶短褲,M

89.99

1

自行車架

拖車式車架 - 可容納 4 輛自行車

120

1

腳踏車停車架

All-Purpose 自行車站

159

1

瓶子和籠子

Mountain Bottle Cage

9.99

1

瓶子和籠子

Road Bottle Cage

8.99

2

瓶子和籠子

水瓶 - 30 盎司。

4.99

3

Bottom Brackets

HL 下括弧

121.49

1

Bottom Brackets

ML 中軸

101.24

2

Bottom Brackets

LL 中軸

53.99

3

...

...

...

...

備註

請注意,數個數據列具有相同的順位值,並略過一些值。 這是因為我們只使用 RANK。 根據需求,您可能會想要避免在相同的排名值上產生繫結。 您可以使用 DENSE_RANK、NTILE 和 ROW_NUMBER 等其他函式來控制排名值,並根據需要進行調整。 如需這些函式的詳細資訊,請參閱 Transact-SQL 參考檔

資料列集函數

數據列集函式會傳回可在FROM子句中作為數據源使用的虛擬數據表。 這些函式會採用數據列集函式本身特有的參數。 其中包括 OPENDATASOURCE、OPENQUERY、OPENROWSET、OPENXML 和 OPENJSON。

OPENDATASOURCE、OPENQUERY 和 OPENROWSET 函式可讓您將查詢傳遞至遠端資料庫伺服器。 遠端伺服器接著會傳回一組結果數據列。 例如,下列查詢會使用OPENROWSET從名為 SalesDB的 SQL Server 實例取得查詢的結果。

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
    'SELECT Name, ListPrice
    FROM AdventureWorks.Production.Product') AS a;

若要使用遠端伺服器,您必須在執行查詢的 SQL Server 實例中啟用一些進階選項。

OPENXML 和 OPENJSON 函式可讓您以 XML 或 JSON 格式查詢結構化數據,並將值擷取到表格式數據列集中。

數據列集函式的詳細探索超出此課程模組的範圍。 如需詳細資訊,請參閱 Transact-SQL 參考檔