2

Caseステートメントで複数のAndを使用すると問題が発生します。

私のデータベースは次のようになります:

Enrollment      Paperless      Validated
0               1              0
1               0              1
0               1              0
1               1              1
0               0              0
0               1              0
0               0              0
0               1              0
1               1              1
0               1              0

したがって、私のクエリは次のようになります。

Select
    Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Paperless]
    ,Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Online_Only]
    ,Count(*) as "Total"
FROM [my_table]

SQLフィドル:http ://sqlfiddle.com/#!3/61202/5

SQLフィドルからわかるように、caseステートメントでは、異なるはずの場合、カウントは常に20です。私は自分のcaseステートメントで何か間違ったことをしているだけですか、それともサブクエリでそれらをしなければなりませんか?

デイブ

4

2 に答える 2

6

COUNT実際の値に関係なく true を返します。だから使用:

SUM(CASE ...)

それ以外の

COUNT(CASE ...)
于 2012-05-21T18:02:22.673 に答える
2

他の 2 つの方法を次に示します。

(1) COUNT() を使用できますが、ELSE 句を削除します。これは 0 ではなく NULL になるため、カウントされません。

(2) 数学演算に切り替えることもできます。

SELECT SUM(Enrollment*Paperless*Validated) as <whatever>,
       SUM(Enrollment*(1-PaperLess)*Validated) as <something else>

個人的には、ステートメントが短く、スクロールせずにすべての条件を確認できることが多いため、乗算形式が好きなことがよくあります。

于 2012-05-21T18:11:35.170 に答える