问题描述
SELECT
TheDate,00 AS ReportID,(SELECT SiteID FROM LocalVariables) AS SiteID,(SELECT COUNT(COALESCE([ReviewID],0)) AS Expr1
FROM [RAAudits]
WHERE (CAST([DateCompleted] AS date) = DateExtended.TheDate)
AND pass = 1) * 100 /
(SELECT COUNT(COALESCE([ReviewID],0)) AS Expr2
FROM [RAAudits]
WHERE (CAST([DateCompleted] AS date) = DateExtended.TheDate)) AS DataValue
FROM
DateExtended
WHERE
TheDate BETWEEN (SELECT ServiceStartDate FROM LocalVariables)
AND GETDATE() -1
解决方法
我建议改用 avg()
。假设 pass
仅采用值 0
和 1
:
SELECT TheDate,00 As ReportID,(SELECT SiteID from LocalVariables) as SiteID,(SELECT AVG(pass * 100.0)
FROM [RAAudits]
WHERE cast([DateCompleted] as date) = DateExtended.theDate
)
FROM DateExtended
WHERE TheDate BETWEEN (SELECT ServiceStartDate from LocalVariables) AND GETDATE() -1;
注意:使用子查询代替 JOIN
似乎很奇怪,但它们不应该影响性能。但是,如果 LocalVariables
有多于一行,查询将中断。