【问题标题】:T-SQL Return All 3-Way Combinations of a TableT-SQL 返回表的所有 3 路组合
【发布时间】:2020-12-10 14:17:17
【问题描述】:

我有一个相对简单的问题,但似乎找不到解决方案。我的桌子是这样的:

+---------+----------+
| Article | Supplier |
+---------+----------+
|    4711 | A        |
|    4712 | B        |
|    4712 | C        |
|    4712 | D        |
|    4713 | C        |
|    4713 | E        |
+---------+----------+

现在,我想找到所有可能的 3 路组合。每篇文章都必须包含在每个组中(4711、4712、4713)。对于上面的示例,我们将获得 6 个组合对和 18 个数据集。结果应如下所示:

+----------------+---------+----------+
| combination_nr | article | supplier |
+----------------+---------+----------+
|              1 |    4711 | A        |
|              1 |    4712 | B        |
|              1 |    4713 | C        |
|              2 |    4711 | A        |
|              2 |    4712 | B        |
|              2 |    4713 | E        |
|              3 |    4711 | A        |
|              3 |    4712 | C        |
|              3 |    4713 | C        |
|              4 |    4711 | A        |
|              4 |    4712 | D        |
|              4 |    4713 | E        |
|              5 |    4711 | A        |
|              5 |    4712 | D        |
|              5 |    4713 | C        |
|              6 |    4711 | A        |
|              6 |    4712 | D        |
|              6 |    4713 | E        |
+----------------+---------+----------+

非常感谢您的帮助。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    我认为将每个组合放在一行更容易:

    select row_number() over () as combination_nr,
           t1.article, t1.supplier,
           t2.article, t2.supplier,
           t3.article, t3.supplier
    from t t1 join
         t t2
         on t2.article > t1.article 
         t t3
         on t3.article > t2.article;
    

    如果您确实需要,您可以将其拆分为单独的行。

    【讨论】:

    • 非常感谢您的帮助!这适用于上面的示例,但是,我没有提到的是它可能超过 3 篇文章。这只是 3 篇文章的示例。很抱歉没有提到这一点。你知道怎么做吗?
    • @TomelSafadi 。 . .这个问题明确地涉及三篇文章。这回答了你提出的问题。如果您有不同的问题,请提出一个新问题。编辑这个只会使这个答案无效并鼓励投票(这是不礼貌的)。
    • 我将它作为一个新问题发布。抱歉没有具体说明。如果您有解决方案,我将不胜感激。这是新问题的链接:stackoverflow.com/questions/65237476/…
    猜你喜欢
    • 2022-01-02
    • 2015-06-21
    • 1970-01-01
    • 2016-08-19
    • 2014-01-19
    • 1970-01-01
    • 2022-01-12
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多