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

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

我需要从一组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 :

  1. select n1.n, n2.n, n3.n, n4.n, n5.n, n6.n
  2. from numbers n1 join
  3. numbers n2
  4. on n1.n < n2.n join
  5. numbers n3
  6. on n2.n < n3.n join
  7. numbers n4
  8. on n3.n < n4.n join
  9. numbers n5
  10. on n4.n < n5.n join
  11. numbers n6
  12. on n5.n < n6.n;

这个 join 条件指定数字只使用一次,这在这类问题中是典型的,给定的组合只出现一次--从最小到最大的顺序。

mwecs4sa

mwecs4sa2#

这里有一个不允许重复值的选项
注:返回3.6mm行,假设3,5,。。不等于5,3,。。。
例子

  1. Declare @YourTable Table ([N] int)
  2. Insert Into @YourTable Values
  3. (3),(5),(8),(14),(18),(20),(21),(27),(28),(30),(32),(33),(37),(39),(40)
  4. Select N1=N1.N
  5. ,N2=N2.N
  6. ,N3=N3.N
  7. ,N4=N4.N
  8. ,N5=N5.N
  9. ,N6=N6.N
  10. From @YourTable N1
  11. Join @YourTable N2 on N2.N<>N1.N
  12. Join @YourTable N3 on N3.N<>N1.N and N3.N<>N2.N
  13. Join @YourTable N4 on N4.N<>N1.N and N4.N<>N2.N and N4.N<>N3.N
  14. Join @YourTable N5 on N5.N<>N1.N and N5.N<>N2.N and N5.N<>N3.N and N5.N<>N4.N
  15. 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条件

展开查看全部

相关问题