おそらく以下のようなクエリで実現できると思います。
sql
1WITH RECURSIVE
2A (シーケンス番号, 組合せ) AS (
3 SELECT 0 , JSON_ARRAY()
4 UNION ALL
5 SELECT B.シーケンス番号, JSON_ARRAY_APPEND(A.組合せ, '$', JSON_OBJECT('ID', B.ID, 'グループ', B.グループ))
6 FROM A
7 JOIN (SELECT T.ID, T.グループ, DENSE_RANK() OVER (ORDER BY ID) AS シーケンス番号 FROM T) AS B
8 ON A.シーケンス番号 + 1 = B.シーケンス番号
9),
10B (インデックス) AS (
11 SELECT 0
12 UNION ALL
13 SELECT インデックス + 1
14 FROM B
15 WHERE インデックス + 1 < (SELECT MAX(JSON_LENGTH(組合せ)) FROM A)
16)
17SELECT
18 C.パターン,
19 JSON_UNQUOTE(JSON_EXTRACT(C.組合せ, CONCAT('$[', B.インデックス, '].ID'))) AS ID,
20 JSON_EXTRACT(C.組合せ, CONCAT('$[', B.インデックス, '].グループ')) AS グループ
21FROM (
22 SELECT
23 組合せ,
24 ROW_NUMBER() OVER(PARTITION BY JSON_LENGTH(組合せ)) AS パターン,
25 DENSE_RANK() OVER(ORDER BY JSON_LENGTH(組合せ) DESC) AS レベル
26 FROM A
27) C
28JOIN B ON C.レベル = 1
29ORDER BY パターン, ID
IDが1000を超える可能性があるとのことですが、たとえば1IDあたり2グループに属するとすると、組み合わせの総数は2の1000乗(≧10の300乗)となり、事実上有限時間内では処理できないと思います。計算量爆発というやつですね。どういう業務を想定されているのかわからないのですが、処理数に上限を設ける、枝刈により処理数を減らす、そもそも業務自体を見直すなどの工夫が必要になるかと思います。