我正在尝试编写一个脚本,该脚本将在给定大小为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)
呢?