Случай SQL-запроса с предложением Где / Имея

0

Как применить предложение 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**
Теги:

2 ответа

0
Лучший ответ

Предложение 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
1

Ключевое слово HAVING используется, только если вы используете GROUP BY. То, что вы хотите, это WHERE, но вы не сможете ссылаться на использование, если вы не обернете его в подборе.

  • 0
    Ну вот так? Где (СЛУЧАЙ, КОГДА ВОЗМОЖНОСТИ <= 0, ТОГДА '0', ДАЛЕЕ CAST ([Активации] как плавающее) / [Права] КОНЕЦ)> = .25 GROUP BY ID, [Активации], [Права]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню