NTILE es una función que permite distribuir los registros en un número de grupos determinado (percentil, cuartil o alguna otra subdivisión).
Sintaxis
NTILE (integer_expression) OVER ([ <partition_by_clause> ] < order_by_clause >)
Ejemplo.
Se crea una consulta especificando que se desea agrupar en cuartiles en función al campo order_amount. El resultado nos mostrará cuántas órdenes quedan en cada cuartil.
Primero se crea una tabla y se ingresan registros ficticios para el ejemplo.
CREATE TABLE [dbo].[Orders]
(
order_id INT,
order_date DATE,
customer_name VARCHAR(250),
city VARCHAR(100),
order_amount MONEY
)
INSERT INTO [dbo].[Orders]
SELECT '5001','2021-05-01','Denton Swanson','Monterrey',5000
UNION ALL
SELECT '5002','2021-05-02','Benjamin Mccullough','Guadalajara',10000
UNION ALL
SELECT '5003','2021-05-03','Tad Singleton','Querétaro',2500
UNION ALL
SELECT '5004','2021-05-04','Garth Hodge','Monterrey',7500
UNION ALL
SELECT '5005','2021-05-05','Sonya Brennan','Querétaro',3500
UNION ALL
SELECT '5006','2021-05-06','Neville Serrano','Monterrey',12500
UNION ALL
SELECT '5007','2021-05-10','Sebastian Lambert','Guadalajara',7500
UNION ALL
SELECT '5008','2021-05-11','Samantha Sandoval','Guadalajara',1000
UNION ALL
SELECT '5009','2021-05-20','Joshua Villarreal','Querétaro',500
UNION ALL
SELECT '5010','2021-05-25','Sonya Brennan','Monterrey',250
A continuación se ejecuta la consulta que incluye la función NTILE().
SELECT order_id,order_date,customer_name,city, order_amount,
NTILE(4) OVER (ORDER BY order_amount) [row_number]
FROM [dbo].[Orders]

En este ejemplo, con un total de 10 registros, se especifican cuatro grupos resultantes.
El total de registros por cada grupo sería de 2.5 (10/4), pero el número de registros debe ser un número entero, por lo que en este caso se asignan 3 registros para los primeros dos grupos y 2 registros para los dos grupos restantes.