3 回答

TA貢獻1836條經驗 獲得超13個贊
您可以將SUM(而不是COUNT?。┡cCASE語句結合使用,如下所示:
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 關注
- 1339 瀏覽
添加回答
舉報