从存档中检查成对的彩票号码

Check pairs of lottery numbers from archive

我正在努力寻找最佳解决方案来检查与我的国家彩票有关的配对。他们画了六个数字。我有一个包含所有以前图纸的数据库。问题是什么是最有效的table结构和检查彩票号码对的方式'?

这是我的 table 的样子:

year (float)    
date (nvarchar)    
draw (float)    
no1 (smallint)    
no2 (smallint)    
no3 (smallint)    
no4 (smallint)    
no5 (smallint)    
no6 (smallint)

我使用这个查询来查找一对数字:

SELECT COUNT(*)
FROM archive
WHERE '1' IN (no1,no2,no3,no4,no5,no6) AND '36' IN (no1,no2,no3,no4,no5,no6)

我得到结果 10(这对被抽出 10 次)。

如果我想检查下一对,例如 1 和 37,我需要再次使用查询,但要使用其他数字

SELECT COUNT(*)
FROM archive
WHERE '1' IN (no1,no2,no3,no4,no5,no6) AND '37' IN (no1,no2,no3,no4,no5,no6)

我得到结果 13(这对被抽出 13 次)

是否有SQL查询(或更好的解决方案)可以自动检查1到90之间的数字对;示例:

Pair 1 and 2
Pair 1 and 3
Pair 1 and 4
.
.

一直到第 89 对和第 90 对?

在这里稍微通读一下,但 Tally 似乎是这里的最佳选择:

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT TOP (90) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2)
SELECT COUNT(*) AS Draws,
       T1.I AS Number1,
       T2.I AS Number2
FROM dbo.Archive S
     CROSS JOIN Tally T1
     JOIN Tally T2 ON T1.I < T2.I
WHERE T1.I IN (no1,no2,no3,no4,no5,no6)
  AND T2.I IN (no1,no2,no3,no4,no5,no6)
GROUP BY T1.I, T2.I;