T-SQLでn個のグループにわける

NTILE関数を使うと簡単にデータをn個のグループにわけることができます。正確には、n個のグループにわけた場合のグループ番号を割り振ると言ったほうがいいかもしれません。

NTILE (Transact-SQL) | Microsoft Docs

NTILE関数を使ったサンプルを書いてみます。

まず適当なデータ、今回は11から20までの10個の数値を用意します。

drop table if exists #Sequence;

-- 11から20までの10個の数値を生成
with Source(Value) as(
    select 11
    union all
    select Value + 1
    from Source
)
select top 10 *
into #Sequence
from Source;

-- 確認
select *
from #Sequence;
/*
Value
-----------
11
12
13
14
15
16
17
18
19
20
*/

この11から20までの数値を3つのグループにわけたいと思います。

-- 3つのグループにわける
declare @group int = 3;

select
    *,
    -- Valueの昇順で3つのグループにわけたグループ番号を割り振る
    ntile(@group) over (order By Value) as GroupNo
from #Sequence;

/*
Value       GroupNo
----------- --------------------
11          1
12          1
13          1
14          1
15          2
16          2
17          2
18          3
19          3
20          3
*/

4個・3個・3個のグループにわけることができました。総数がグループ数で割り切れない場合、NTILE関数は最初のグループから多く割り振っていきます。