Использование случая, когда - Возможно ли это? - PullRequest
0 голосов
/ 20 декабря 2011

Сразу же - я новичок в «случае, когда».Я прочитал следующее: Как мне выполнить IF ... THEN в SQL SELECT? однако он не ответил на мой вопрос.

По сути, что я пытаюсь сделатьчто-то вроде следующего:

select
    section_name, *
from
    property.lease_period lp
where
    lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
    and lp.period_id = @period_id
    and lp.building_id = @building_id
    and not exists
    (
        select 1
        from lease_deal.lease
        where lp.suite_name = tenancy_reference
        and lp.building_id = building_id
    )
    case when(@section_name <> 'ALL')
    then(and upper(section_name) = upper(@section_name))
    end
order by period_id desc

Возможно ли это?Если так, что я делаю не так?

Tl; dr:

По сути, я хотел бы:

and upper(section_name) = upper(@section_name)

Для применения только к моей гдепредложение, когда @section_name не равно 'ALL'

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Вы можете просто изменить свой (нерабочий) случай на

AND (@section_name = 'ALL' OR upper(section_name) = upper(@section_name))
1 голос
/ 20 декабря 2011

Это можно сделать более простым способом без использования CASE. Это будет примерно так:

and ((upper(section_name) = upper(@section_name) and @section_name <> 'ALL') OR @section_name ='ALL')
0 голосов
/ 20 декабря 2011
AND upper(section_name)=CASE WHEN @section_name <> 'ALL' THEN upper(@section_name)
                                                         ELSE upper(section_name)
                        END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...