Pensalo come bucket, NTILE(2) creerà 2 bucket, metà delle righe avrà il valore 1 e l'altra metà il valore 2
esempio
create table #temp(StudentID char(2), Marks int)
insert #temp values('S1',75 )
insert #temp values('S2',83)
insert #temp values('S3',91)
insert #temp values('S4',83)
insert #temp values('S5',93 )
select NTILE(2) over(order by Marks),*
from #temp
order by Marks
Ecco l'output, poiché hai un numero dispari di righe, il bucket 1 avrà 1 riga in più
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S5 93
Se aggiungi un'altra riga
insert #temp values('S6',92 )
Ora entrambi i bucket hanno 3 righe
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S6 92
2 S5 93
In realtà non ho mai usato NTILE nel codice di produzione, ma posso vedere l'uso in cui è necessario dividere i risultati in n numero di bucket