获取一列所有可能的组合
Get all the possible combinations of one column
假设我有这样一个专栏:
col
---
A
B
C
我需要所有可能的行组合,如下所示:
result
---
A
B
C
A,B
A,C
B,C
A,B,C
获得结果的最佳解决方案是什么?
我找到的大多数答案都建议对每一行进行连接,但我需要一些东西来覆盖不同数量的行
您可以使用递归 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;
请参阅数据库<>fiddle here。
假设我有这样一个专栏:
col
---
A
B
C
我需要所有可能的行组合,如下所示:
result
---
A
B
C
A,B
A,C
B,C
A,B,C
获得结果的最佳解决方案是什么?
我找到的大多数答案都建议对每一行进行连接,但我需要一些东西来覆盖不同数量的行
您可以使用递归 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;
请参阅数据库<>fiddle here。