SQL Server:生成可能的数字组合

时间:2015-06-21 22:07:10

标签: sql sql-server numbers combinations

我总共有41个数字,我正在尝试在这些数字之间生成6位数的可能组合,并将它们插入到SQL Server的表中。

有人可以帮我这么做吗?

非常感谢!

2 个答案:

答案 0 :(得分:7)

要生成所有可能的排列(41!/(6!*(41-6)!)不到450万),您可以使用

WITH Balls(N)
     AS (SELECT number
         FROM  master..spt_values
         WHERE type='P'
         AND number BETWEEN 1 AND 41)
SELECT *
FROM   Balls B1
       JOIN Balls B2
         ON B2.N > B1.N
       JOIN Balls B3
         ON B3.N > B2.N
       JOIN Balls B4
         ON B4.N > B3.N
       JOIN Balls B5
         ON B5.N > B4.N
       JOIN Balls B6
         ON B6.N > B5.N 

enter image description here

答案 1 :(得分:2)

将数字存储在表格中,并使用cross join六次将此表格与自身匹配。 如果数字无法重复,请添加where条款或inner join on条款,如on t3.num not in (t1.num,t2.num)

drop table #temp
GO
create table #temp (num int identity(1,1), x int)
GO
insert into #temp default values
GO 41

select 
    *
from #temp t1
cross join #temp t2
cross join #temp t3 
-- and so on