Как применить предложение Where или Have к запросу? У меня возникают проблемы с условием "Бытие".
DECLARE @dtDate DATE
SET @dtDate = GETDATE();
with EMS as
(
select * from ReportingView.WTA where FiscalMonth = DATENAME(MONTH, @dtDate) + ', ' + DATENAME(YEAR, @dtDate) and ProductGroup = 'AAD'
)
select
[ID]
,(CASE
WHEN Entitlements <= 0 THEN '0'
ELSE CAST([Activations] as float) / [Entitlements]
END) as Utilization
from EMS
**HAVING Utilization >= .25**
Предложение where
и having
в конце вашего запроса. Если у вас есть и, то, where
приходит до того, как having
.
В вашем случае, ваш, having
не работает, потому что having
только для использования с group by
. having
по существу предложение where
для совокупных значений (таких как sum
, count
и т.д.),
Примеры:
WHERE
SELECT
*
FROM
EMS
WHERE
Utilization >= 0.25
HAVING
SELECT
col1, count(*)
FROM
EMS
GROUP BY
col1
HAVING
count(*) > 10
HAVING
И WHERE
SELECT
col1, count(*)
FROM
EMS
WHERE
Utilization >= 0.25
GROUP BY
col1
HAVING
count(*) > 10
Изменить: этот измененный запрос должен работать на вас. Я не уверен, почему ваш исходный запрос использовал CTE, но я переместил логику case
в CTE.
with EMS as
(
select
[ID],
(
CASE
WHEN Entitlements <= 0 THEN '0'
ELSE CAST([Activations] as float) / [Entitlements]
END
) as Utilization
from
ReportingView.WTA
where
FiscalMonth = DATENAME(MONTH, @dtDate) + ', ' + DATENAME(YEAR, @dtDate)
and ProductGroup = 'AAD'
)
select
*
from
EMS
where
Utilizaiton >= .25
Ключевое слово HAVING используется, только если вы используете GROUP BY. То, что вы хотите, это WHERE, но вы не сможете ссылаться на использование, если вы не обернете его в подборе.