小编典典

相当于 COUNTIF 聚合函数的 Sql Server

all

我正在使用一个GROUP BY子句构建一个查询,该子句需要能够仅根据特定条件计算记录(例如,仅计算某个列值等于 1 的记录)。

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’
的所有行的百分比。

关于如何在 MS SQL 2005 环境中正确实现这一点的任何想法?


阅读 70

收藏
2022-07-30

共1个答案

小编典典

您可以将SUM(not 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
2022-07-30