[英]Getting all the combinations of 6 numbers from a set of specific numbers using t-sql
我需要从一组 15 个数字中提取 6 个唯一数字的所有可能组合(按升序排列)。
假设15个数字的集合如下:3, 5, 8, 14, 18, 20, 21, 27, 28, 30, 32, 33, 37, 39, 40,如何提取所有可能组合的列表使用t-sql
6 个数字?
我还需要将数字的 output 添加到包含 n1、n2、n3、n4、n5 和 n6 列的表中。
我发现了以下与我的问题有些相关的问题,但我发现很难翻译答案来解决我的具体问题:
(1) 生成SQL中的所有组合
这是一个不允许重复值的选项
注意:这将返回 3.6MM 行并假设 3,5,.. 与 5,3,... 不同
例子
Declare @YourTable Table ([N] int)
Insert Into @YourTable Values
(3),(5),(8),(14),(18),(20),(21),(27),(28),(30),(32),(33),(37),(39),(40)
Select N1=N1.N
,N2=N2.N
,N3=N3.N
,N4=N4.N
,N5=N5.N
,N6=N6.N
From @YourTable N1
Join @YourTable N2 on N2.N<>N1.N
Join @YourTable N3 on N3.N<>N1.N and N3.N<>N2.N
Join @YourTable N4 on N4.N<>N1.N and N4.N<>N2.N and N4.N<>N3.N
Join @YourTable N5 on N5.N<>N1.N and N5.N<>N2.N and N5.N<>N3.N and N5.N<>N4.N
Join @YourTable N6 on N6.N<>N1.N and N6.N<>N2.N and N6.N<>N3.N and N6.N<>N4.N and N6.N<>N5.N
如果允许重复,您可以使用 CROSS JOIN 或删除 ON 条件
假设这些在一个表中,比如numbers
,使用join
:
select n1.n, n2.n, n3.n, n4.n, n5.n, n6.n
from numbers n1 join
numbers n2
on n1.n < n2.n join
numbers n3
on n2.n < n3.n join
numbers n4
on n3.n < n4.n join
numbers n5
on n4.n < n5.n join
numbers n6
on n5.n < n6.n;
join
条件指定数字只使用一次,这在这类问题中很典型,并且给定的组合只出现一次——按照从小到大的顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.