Pomyśl o tym jak o wiaderkach, NTILE(2) utworzy 2 wiadra, połowa wierszy będzie miała wartość 1, a druga połowa wartość 2
przykład
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
Oto wynik, ponieważ masz nieparzystą liczbę wierszy, zasobnik 1 będzie miał o 1 wiersz więcej
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S5 93
Jeśli dodasz jeszcze jeden wiersz
insert #temp values('S6',92 )
Teraz oba wiadra mają 3 rzędy
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S6 92
2 S5 93
W rzeczywistości nigdy nie używałem NTILE w kodzie produkcyjnym, ale widzę zastosowanie, w którym musisz podzielić wyniki na n liczbę wiader