3 回答
TA贡献1836条经验 获得超13个赞
您可以将SUM(而不是COUNT!)与CASE语句结合使用,如下所示:
SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView
注意:在我自己的测试NULL中,这不是问题,尽管这可能取决于环境。您可以处理空值,例如:
SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView
TA贡献1810条经验 获得超4个赞
我通常会按照Josh的建议去做,但是集思广益并测试了我觉得很喜欢分享的略微曲折的选择。
您可以利用COUNT(ColumnName)不计算NULL的事实,并使用如下所示的内容:
SELECT COUNT(NULLIF(0, myColumn))
FROM AD_CurrentView
NULLIF-如果两个传入的值相同,则返回NULL。
优点:将您的意图表达为COUNT行,而不是SUM()表示法。缺点:不清楚其工作方式(“魔术”通常很糟糕)。
TA贡献1831条经验 获得超4个赞
SELECT COUNT(CASE WHEN myColumn=1 THEN AD_CurrentView.PrimaryKeyColumn ELSE NULL END)
FROM AD_CurrentView
对于我来说效果很好(在SQL Server 2012中),而无需将“计数”更改为“总和”,并且相同的逻辑可移植到其他“条件聚合”中。例如,根据条件求和:
SELECT SUM(CASE WHEN myColumn=1 THEN AD_CurrentView.NumberColumn ELSE 0 END)
FROM AD_CurrentView
- 3 回答
- 0 关注
- 1303 浏览
添加回答
举报