【问题标题】:SQL generate all possible combination between group items on same tableSQL在同一张表上生成组项之间所有可能的组合
【发布时间】:2019-11-08 07:05:24
【问题描述】:

我有一个 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
...

我尝试过使用交叉和完全外部连接,但无法做到。

【问题讨论】:

  • 你的意见是什么?
  • “组间的所有组合”是什么意思?
  • 请向我们展示您的尝试。
  • 我已经尝试过交叉连接本身 SELECT * FROM #tmp_Group_Item c1 CROSS JOIN #tmp_Group_Item c2

标签: sql sql-server tsql combinations


【解决方案1】:

您应该能够通过交叉应用来做到这一点,例如:

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

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2016-01-07
    • 2012-11-02
    • 2022-01-18
    相关资源
    最近更新 更多