我正在使用一个GROUP BY子句构建一个查询,该子句需要能够仅根据特定条件计算记录(例如,仅计算某个列值等于 1 的记录)。
GROUP BY
SELECT UID, COUNT(UID) AS TotalRecords, SUM(ContractDollars) AS ContractDollars, (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1 FROM dbo.AD_CurrentView GROUP BY UID HAVING SUM(ContractDollars) >= 500000
该COUNTIF()行显然失败了,因为没有调用本机 SQL 函数COUNTIF,但这里的想法是确定 MyColumn 的值为 ‘1’ 的所有行的百分比。
COUNTIF()
COUNTIF
关于如何在 MS SQL 2005 环境中正确实现这一点的任何想法?
您可以将SUM(not COUNT!) 与CASE语句结合使用,如下所示:
SUM
COUNT
CASE
SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END) FROM AD_CurrentView
注意:在我自己的测试NULL中不是问题,尽管这可能取决于环境。您可以处理空值,例如:
NULL
SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END) FROM AD_CurrentView