本文件已封存並已停止維護。
NTILE (Transact-SQL)
SQL Server 2005
更新:
2006 年 7 月 17 日
將排序資料分割中的資料列散發到指定數目的群組中。這些群組從 1 開始編號。對於每個資料列,NTILE 都會傳回資料列所屬群組的號碼。
- integer_expression
-
這是一個正整數常數運算式,用來指定每個資料分割必須劃分成幾個群組。integer_expression 的類型可以是 int 或 bigint。
附註: integer_expression 只能參考 PARTITION BY 子句中的資料行。integer_expression 不能參考目前 FROM 子句中列出的資料行。
- <partition_by_clause>
-
將 FROM 子句所產生的結果集分成套用 RANK 函數的資料分割。如需 PARTITION BY 的語法,請參閱<OVER 子句 (Transact-SQL)>。
- < order_by_clause >
-
決定將 NTILE 值指派給資料分割中之資料列的順序。如需詳細資訊,請參閱<ORDER BY 子句 (Transact-SQL)>。在次序函數中使用 <order_by_clause> 時,整數無法表示資料行。
A. 將資料列分成群組
下列範例會將資料列分成四個群組。由於群組數目無法整除資料列的總數,第一個群組會有四個資料列,其餘群組會有三個資料列。
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,NTILE(4) OVER(ORDER BY SalesYTD DESC) AS 'Quartile'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
B. 使用 PARTITION BY 來分割結果集
下列範例會在範例 A 的程式碼中加入 PARTITION BY 引數。資料列會先由 PostalCode 進行資料分割,接著再依據每個 PostalCode 分成四個群組。請注意,OVER 子句中的 ORDER BY 會排列 NTILE 的順序,而 SELECT 陳述式的 ORDER BY 會排列結果集的順序。
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,NTILE(4) OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Quartile'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0
ORDER BY LastName;
GO
顯示:

