簡體   English   中英

帶where / having子句的SQL查詢案例

[英]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,但除非將其包裝在子選擇中,否則您將無法引用“利用率”。

在查詢的末尾都使用wherehaving子句。 如果你有兩個,那么where來了之前having

在你的情況,你having沒有工作,因為having只與所使用group by having本質having是聚合值(例如sumcount等)的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM