SQL генерирует все возможные комбинации между элементами группы в одной таблице - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть таблица SQL, и я хотел бы создать все комбинации между группами.

Комбинация не будет включена сама по себе

Мой код:


IF OBJECT_ID('tempdb..#tmp_Group_Item') IS NOT NULL
    DROP TABLE #tmp_Group_Item
GO

SELECT  *
INTO    #tmp_Group_Item
FROM    (
VALUES
     (1, 1)
    ,(1, 2)
    ,(1, 3)
    ,(2, 1)
    ,(2, 2)
    ,(3, 1)
    ,(3, 2)
    ,(3, 3)
) AS t(GroupID, ID)

Ожидаемый результат будет примерно таким:


CombinationID   GroupID ID
-------------   ------- --
1               1       1
1               2       1
1               3       1
2               1       1
2               2       1
2               3       2
3               1       1
3               2       1
3               3       3

4               1       2
4               2       1
4               3       1
5               1       2
5               2       1
5               3       2
6               1       2
6               2       1
6               3       3

7               1       3
7               2       1
7               3       1
8               1       3
8               2       1
8               3       2
9               1       3
9               2       1
9               3       3
...

Я пробовал с перекрестным и полным внешним соединением, но не смог этого сделать.

1 Ответ

0 голосов
/ 08 ноября 2019

Вы должны быть в состоянии сделать это с перекрестным применением, например:

select [CombinationID] = identity(int, 1, 1), GroupID, ID
into #tmp_Group_Item
from (values (1), (2), (3)) a(GroupID)
cross apply (values (1), (2), (3)) b(ID);

select * from #tmp_Group_Item;

, что дает:

CombinationID   GroupID ID
            1         1  1
            2         1  2
            3         1  3
            4         2  1
            5         2  2
            6         2  3
            7         3  1
            8         3  2
            9         3  3
...