आप किसी क्वेरी के लिए कहां या होने वाले खंड को लागू करते हैं? मुझे क्लॉज होने में समस्या आ रही है।

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**
0
emie 21 पद 2017, 00:58

2 जवाब

सबसे बढ़िया उत्तर

आपकी क्वेरी के अंत में एक 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
0
RToyo 21 पद 2017, 01:12

HAVING कीवर्ड का उपयोग केवल तभी किया जाता है जब आप GROUP BY का भी उपयोग कर रहे हों। आप जो चाहते हैं वह WHERE है लेकिन जब तक आप इसे उप-चयन में लपेट नहीं लेते तब तक आप उपयोग का संदर्भ नहीं दे पाएंगे।

1
Benjamin Racette 21 पद 2017, 01:02