NTILE (języka Transact-SQL)
Wiersze w partycji zamówione rozsyła do określonej liczby grup.Grupy są numerowane począwszy od jednego.Dla każdego wiersza NTILE zwraca liczbę grup, do której należy dany wiersz.
NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Argumenty
integer_expression
Is a positive integer constant expression that specifies the number of groups into which each partition must be divided.integer_expression can be of type int, or bigint.Uwaga
integer_expression can only reference columns in the PARTITION BY clause.integer_expression cannot reference columns listed in the current FROM clause.
<partition_by_clause>
Dzieli zestaw wyników, wyprodukowane przez Z klauzula na partycje, do którego POZYCJA funkcja jest stosowana.Aby zapoznać się ze składnią PARTITION BY zobacz W klauzula (języka Transact-SQL).< order_by_clause >
Określa kolejność, w którym wartości NTILE są przypisane do wierszy w partycji.Aby uzyskać więcej informacji zobaczORDER BY Clause (Transact-SQL).Liczba całkowita nie może reprezentować kolumna po <order_by_clause> używany w funkcja klasyfikacji.
Zwracane typy
bigint
Remarks
Jeśli nie jest podzielić przez liczbę wierszy w partycji integer_expression, spowoduje to, że grupy dwóch rozmiarów, które różnią się przez jednego element członkowski członkowski. Przed mniejszych grup w kolejności określonej przez klauzulę OVER są dostarczane większych grup.Na przykład jeśli całkowita liczba wierszy jest 53 i liczbę grup jest pięć, pierwsze trzy grupy będą miały 11 wierszy i będzie miał dwa pozostałe grupy 10 poszczególnych wierszy.Jeśli całkowita liczba wierszy jest z drugiej strony podzielić przez liczbę grup, wiersze będą się równomiernie między grupami.Na przykład jeśli całkowita liczba wierszy jest 50, a nie ma pięć grup, każdy pakiet będzie zawierać 10 wierszy.
Przykłady
A.Podział wierszy na grupy
W poniższym przykładzie dzieli wiersze na cztery grupy.Całkowita liczba wierszy nie jest podzielić przez liczbę grup, pierwsza grupa ma cztery wiersze, a pozostałe grupy, mają trzy wiersze.
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.Podzielenie wyniku zestaw przy użyciu PARTITION BY
W następującym przykładzie dodano PARTITION BY Argument ten kod w przykładzie A. Wiersze są najpierw podzielony na partycje przez PostalCode a następnie podzielić na cztery grupy w ramach każdej PostalCode. Zwróć uwagę, że ORDER BY w OVER Klauzula zamówień NTILE oraz ORDER BY z SELECT Instrukcja zamówień zestaw wyników.
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