使用Count with Case Statement(T-SQL)

时间:2018-05-30 23:18:20

标签: sql tsql count max case

以下查询产生以下错误消息:“无法对包含聚合或子查询的表达式执行聚合函数。”

我试图根据我在案例陈述中提出的某些标准从表中获取元素(贷款)的数量。我正在使用case语句而不是简单地将条件插入到WHERE子句中,因为我使用此单个查询提取多个度量标准,并且这些条件仅适用于此特定度量标准而不适用于其他标准。我该如何解决?

SELECT COUNT(
     CASE
          WHEN (SELECT CONVERT(DATE, MAX(Dates)) FROM (VALUES (S.SchedClosingDate), (S.SchedClosingDate)) AS SchedDates (Dates)) BETWEEN '05/01/18' AND '05/31/18' THEN FD.FileName
     END
     ) AS [Scheduled to Close]
FROM FileData AS FD
JOIN Status AS S ON FD.FileDataID = S.FileDataID

注意:为了便于阅读,我已从查询中删除了其他指标。

1 个答案:

答案 0 :(得分:0)

使用FROM

将计算移至APPLY子句
SELECT SUM(CASE WHEN v.dte >= '2018-05-01' AND v.dte < '2018-06-01' AND
                     FD.FileName IS NOT NULL
                THEN 1 ELSE 0 END
           END) AS [Scheduled to Close]
FROM FileData FD JOIN
     Status S
     ON FD.FileDataID = S.FileDataID CROSS APPLY
     (SELECT MAX(dte)
      FROM (VALUES (S.SchedClosingDate), (S.SchedClosingDate)) SchedDates(dte)
     ) as v(dte);