SQL Server:在一列中生成字符串数组的所有唯一组合



我正在尝试编写一个脚本,该脚本将在给定大小为n的数组中生成r元素的所有可能组合。

我有一个C#脚本可以做到这一点,但我想知道:在SQL Server中的1个表中使用一个脚本如何实现同样的结果?

我的代码示例:

char []arr = {'1', '2', '3', 'A', 'B', 'C'};
int r = 4;
int n = arr.Length;
printCombination(arr, n, r);

我会得到类似的回报:

123A
123B
123C
12AB
12AC
12BC
13AB
13AC
13BC
1ABC
23AB
23AC
23BC
2ABC
3ABC

都是独一无二的。

我的表很简单,有2列-下面是创建查询:

create table Code
(
id int primary key not null identity(1,1),
Code varchar(10),
);

我想用所有字母数字字符[A-Z-0.9]的给定字符串数组填充大小r=4的所有组合的列代码。

您可以交叉加入您的值的CTE四次

WITH cte AS (
SELECT *
FROM (VALUES('1'), ('2'), ('3'), ('A'), ('B'), ('C')) v(YourValue)
)
INSERT Code (Code)
SELECT CONCAT(a.YourValue, b.YourValue, c.YourValue, d.YourValue)
FROM cte a
CROSS JOIN cte b
CROSS JOIN cte c
CROSS JOIN cte d;

db<gt;小提琴

还有其他生成值的方法,例如使用数字表和CHAR()

顺便说一句:为什么要为IDENTITY列而烦恼呢?为什么不将Code作为主键,并将其作为char(4)呢?

最新更新