Установите два разных значения / результаты с помощью CASE - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть эти два оператора CASE в гораздо большем запросе -

CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END DNR2017,
CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END DNR2018

Проблема, с которой я сталкиваюсь, состоит в том, что если она равна 2017, то для DNR2017 и DNR2018 необходимо установить значение «YES». Как и сейчас, в тех случаях, когда дата в 2017 году, он устанавливает DNR2017 на YES, но оставляет DNR2018 на NO. Есть ли способ справиться с этим?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

С вашей логикой я бы использовал функцию TO_NUMBER.

(CASE WHEN TO_NUMBER(to_char(tm.DNRDATE,'YYYY')) <= 2017 THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN TO_NUMBER(to_char(tm.DNRDATE,'YYYY')) <= 2018 THEN 'YES' ELSE 'NO' END) as DNR2018

EDIT

Спасибо @Alex Poole, отметьте, что вы также можете использовать extract, чтобы получить номер года.

(CASE WHEN extract(year from tm.DNRDATE) = 2017 THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN extract(year from tm.DNRDATE) BETWEEN 2017 AND 2018 THEN 'YES' ELSE 'NO' END) as DNR2018
0 голосов
/ 02 ноября 2018

Вы можете использовать in:

(CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN to_char(tm.DNRDATE,'YYYY') IN ('2017', '2018') THEN 'YES' ELSE 'NO' END) as DNR2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...