根据条件计数计算唯一行

时间:2013-12-02 17:31:52

标签: sql sql-server-2008

从下表中,我想计算当状态不是3时得分0.0000的出现次数。此外,我想按问题ID返回唯一的行。

我已尝试过COUNT和Group by条款,但我无法走得太远。非常感谢任何正确方向的帮助。

question_id question_desc   status  class_id    score
650               DE           3    1          0.0000
650               DE           2    1          1.0000
651             ADELA          2    1          1.0000
651             ADELA          2    1          1.0000
652               AE           2    1          1.0000
652               AE           2    1          1.0000
653               AP           2    1          0.0000
653               AP           2    1          1.0000

......转变为......

question_id question_desc   count 
650               DE           0
651             ADELA          0
652               AE           0
653               AP           1

1 个答案:

答案 0 :(得分:3)

您可以使用case仅计算符合条件的行:

select  question_id
,       question_desc
,       count(case when score = 0 and status <> 3 then 1 end) as [count]
from    YourTable
group by
        question_id
,       question_desc

假设score是一个精确的数字类型,例如decimal。如果它是近似数字类型,例如floatreal,请使用:

,       count(case when abs(score) < 0.00005 and status <> 3 then 1 end) as [count]