使用次序函數和資料列集函數
順位和資料列集函數不會傳回單一值,所以不是純量函式。 這些函式會接受一組資料列作為輸入,然後傳回一組資料列作為輸出。
次序函數
次序函數可讓您計算使用者定義的一組資料列。 這些函數包括次序、位移、彙總和分佈函數。
此範例使用 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
RankByPrice
749
Road-150 Red, 62
3578.27
1
750
Road-150 Red, 44
3578.27
1
751
Road-150 Red, 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;
此查詢的結果可能如下所示:
類別
Products
ListPrice
RankByPrice
Bib-Shorts
Men's Bib-Shorts, S
89.99
1
Bib-Shorts
Men's Bib-Shorts, M
89.99
1
Bike Racks
Hitch Rack - 4-Bike
120
1
Bike Stands
All-Purpose Bike Stand
159
1
自行車水壺架
Mountain Bottle Cage
9.99
1
自行車水壺架
Road Bottle Cage
8.99
2
自行車水壺架
Water Bottle - 30 oz.
4.99
3
五通軸心
HL Bottom Bracket
121.49
1
五通軸心
ML Bottom Bracket
101.24
2
五通軸心
LL Bottom Bracket
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 參考文件。