2015-06-21 2 views
4

У меня есть полный юниверс из 41 числа, и я пытаюсь создать возможные комбинации из 6 цифр между этими числами и вставить их в таблицу на SQL Server.SQL Server: генерировать возможные комбинации чисел

Может ли кто-нибудь помочь мне?

спасибо!

+0

пример может дать лучшее понимание .. это сочетание 6 из 41 и повторение разрешено? – Dreamweaver

+0

порядок значений не имеет значения, но не должен повторяться. Например, возможно комбинаторное: 1 - 2 - 10 - 21 - 30 - 41 –

+0

Как будто вы рассчитывали все возможные номера лотереи с 6 из 41 шара? –

ответ

6

Для получения всех возможных перестановок (41!/(6!*(41-6)!) чуть менее 4,5 миллионов), вы можете использовать

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

Сохраните номера в таблице и используйте 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 
Смежные вопросы