繁体   English   中英

使用 t-sql 从一组特定数字中获取 6 个数字的所有组合

[英]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中的所有组合

(2) 如何生成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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM