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

ktca8awb  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(385)

我需要从一组15个数字中提取6个唯一数字(按升序)的所有可能组合。
假设15个数字的集合如下:3、5、8、14、18、20、21、27、28、30、32、33、37、39、40,如何使用 t-sql ?
我还需要将数字的输出添加到具有列n1、n2、n3、n4、n5和n6的表中。
我发现以下问题与我的问题有些关联,但我发现很难翻译答案来解决我的具体问题:
(1) 在sql中生成所有组合
(2) 如何在sql中生成所有可能的数据组合?

nuypyhwy

nuypyhwy1#

假设它们在一张table上,比如说 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 条件指定数字只使用一次,这在这类问题中是典型的,给定的组合只出现一次--从最小到最大的顺序。

mwecs4sa

mwecs4sa2#

这里有一个不允许重复值的选项
注:返回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

如果允许重复,则可以使用交叉联接或删除on条件

相关问题