Конечно
HAVING для постагрегатной (например, после GROUP BY) фильтрации. SUM(TotalWedThurMins)
- это совокупность. Таким образом, udf, использующий SUM в качестве параметра, переходит в НЕ ГДЕ.
SUM(TotalWedThurMins)
не определено и не имеет смысла в предложении WHERE
Однако State
не агрегируется и может быть в предложении WHERE.
Так это выглядит так. Но почему GROUP BY, а затем SUM TotalWedThurMins
? Возможно, вам нужно предложение OVER для управления обоими ... (не уверен, что это правильный синтаксис)
SELECT Fname, Lname, id, State, TotalWedThurMins, StCode
FROM dbo.AnnualRegCredits
WHERE (State = 'HI')
GROUP BY Fname, Lname, id, State, TotalWedThurMins, StCode
HAVING (dbo.roundnearestquarter(SUM(TotalWedThurMins) OVER ()) > 0)
Альтернативная формулировка с использованием OVER и CTE:
WITH CTE AS
(
SELECT Fname, Lname, id, State, TotalWedThurMins, StCode,
SUM(TotalWedThurMins) OVER () AS SumTotalWedThurMins
FROM dbo.AnnualRegCredits
WHERE State = 'HI'
)
SELECT
Fname, Lname, id, State, TotalWedThurMins, StCode
FROM
CTE
WHERE
dbo.roundnearestquarter(SumTotalWedThurMins) > 0