【问题标题】:Get all the possible combinations of one column获取一列的所有可能组合
【发布时间】:2021-08-24 07:29:27
【问题描述】:

假设我有一个这样的专栏:

col
---
A
B
C

我需要所有可能的行组合,如下所示:

result
---
A
B
C
A,B
A,C
B,C
A,B,C

获得结果的最佳解决方案是什么?

我发现的大多数答案都建议对每一行进行连接,但我需要一些东西来涵盖不同的行数

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 你可能需要一个递归 cte。
  • 为什么缺少 B 和 C?
  • @Serg 我的错,我修好了
  • 原始行是否唯一?

标签: sql sql-server tsql combinations permutation


【解决方案1】:

您可以使用递归 cte 来获得所需的结果,正如@Serg 建议的那样,我认为 'B' 和 'C' 也应该是最终结果的一部分。

create table test(col varchar(10))
insert into test
select 'A'
union select 'B'
union select 'C'

;WITH cte (grp, col) 
AS 
(
  SELECT CAST(t.COL AS VARCHAR(100)), t.COL
  FROM TEST t
  
  UNION ALL
  
  SELECT CAST(c.grp + ',' + t.col AS VARCHAR(100)), t.COL
  FROM TEST t
  INNER JOIN cte c
    ON c.col < t.COL
)
SELECT grp FROM cte;

请看 dbfiddle here

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多