1

テーブルから各数値の可能なすべての組み合わせを数えたいと思います。

クエリで次のようなものが返されるようにします。

Number (Value)     Count
       1            39
       2            450
       3            41

私のテーブルは次のようになります。

ここに画像の説明を入力

次のクエリを実行すると:

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

私はこのようなものを得る:

ここに画像の説明を入力

4

3 に答える 3

5

unpivot多くの場合、一連の よりも優れたパフォーマンスを発揮するため、このソリューションを提供しますunion all。その理由は、それぞれ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;
于 2013-07-06T12:25:11.497 に答える