[英]SQL Query Case with Where/Having Clause
如何將Where或Haveing子句應用於查詢? 我在Haveing子句中遇到問題。
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**
僅當您也使用GROUP BY時,才使用HAVING關鍵字。 您需要的是WHERE,但除非將其包裝在子選擇中,否則您將無法引用“利用率”。
在查詢的末尾都使用where
和having
子句。 如果你有兩個,那么where
來了之前having
。
在你的情況,你having
沒有工作,因為having
只與所使用group by
。 having
本質having
是聚合值(例如sum
, count
等)的where
子句
例子:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.