SQL Server中的组合

时间:2019-04-14 13:36:27

标签: sql sql-server

使用SQL Server(2008)并给出具有如下行的表:

this

使用x的值(例如,参数@x),我希望能够生成带有x列的行,从而给出表中ID值的所有组合:

例如,对于x = 2,将产生具有两列的输出,如下所示:

Id
--
4
7

在x = 3的情况下,结果将是具有三列的行,如下所示:

4,4
4,7
7,4
7,7

该表可能包含比上例中的2行更多或更少的行,这也取决于x的值,这将更改输出中组合行/列的数量。

例如 如果该表包含:

4,4,4
4,4,7
4,7,4
4,7,7
7,4,4
7,4,7
7,7,4
7,7,7

如果x = 2,将会产生

4
7
9

如果x = 3,将会产生

4,4
4,7
4,9
7,4
7,7
7,9
9,4
9,7
9,9

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用递归CTE进行此操作:

with cte as (
      select convert(varchar(max), id) as ids, 1 as cnt
      from t
      union all
      select ids + ',' + convert(varchar(max), id), cnt + 1
      from cte join
           t
           on cte.cnt < @x
     )
select *
from cte
where cnt = @x;

Here是db <>小提琴。

注意:您需要将结果表示为字符串,因为SQL不允许您返回可变数量的列。您可以将每个值放在单独的列中,但随后将无法使用变量来控制组合的大小。

答案 1 :(得分:1)

另一种可能的方法是使用动态SQL:

Id  Id
4   4
7   4
9   4
4   7
7   7
9   7
4   9
7   9
9   9

@x = 2的输出

{{1}}