Pri*_*ton 1 sql t-sql sql-server-2008
我想从我的表中计算每个数字的所有可能组合.
我希望我的查询返回这样的内容:
Number (Value) Count
1 39
2 450
3 41
Run Code Online (Sandbox Code Playgroud)
我的表看起来像这样:

当我运行以下查询时:
SELECT *
FROM dbo.LottoDraws ld
JOIN dbo.CustomerSelections cs
ON ld.draw_date = cs.draw_date
CROSS APPLY(
SELECT COUNT(1) correct_count
FROM (VALUES(cs.val1),(cs.val2),(cs.val3),(cs.val4),(cs.val5),(cs.val6))csv(val)
JOIN (VALUES(ld.draw1),(ld.draw2),(ld.draw3),(ld.draw4),(ld.draw5),(ld.draw6))ldd(draw)
ON csv.val = ldd.draw WHERE ld.draw_date = '2013-07-05'
)CC
ORDER BY correct_count desc
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:

我提供这种解决方案,因为它unpivot通常比一系列union alls 表现更好.原因是每个都union all可以导致全表扫描,而unpivot它可以通过单次扫描完成.
所以,你可以写下你想要的东西:
select val, count(*)
from (select pk, val
from test
unpivot (val for col in (val1, val2, val3, val4, val5, val6)
) as unpvt
) t
group by val
order by val;
Run Code Online (Sandbox Code Playgroud)