Примеры использования в SQL - природа процесса - PullRequest
0 голосов
/ 07 ноября 2018

Я пишу регистр в SQL, чтобы определить, является ли работник ветераном или супругом-ветераном. Есть три поля, которые содержат данные, и логика будет:

1) Если в любом из трех полей указан ветеран, человек является ветераном 2) Если ни один не указывает на ветеран, а последний указывает на супруга, то этот человек является супругом

Example Scenarios

Я написал заявление о ситуации, которое, кажется, работает:

CASE
WHEN Flag1 = 'Vet' THEN 'Veteran'
WHEN Flag2 = 'Vet' THEN 'Veteran'
WHEN Flag3 = 'Vet' THEN 'Veteran'
WHEN Flag3 = 'Spouse' THEN 'Veteran Spouse'
ELSE 'Non Veteran/Spouse'
END

Мне интересно, работает ли это, потому что в моих данных нет сценариев, которые вызывают сбой, а не потому, что они написаны правильно. Например, у меня нет данных, где один из первых двух флагов говорит о ветеринаре, а флаг 3 - о супруге (которого я ожидал бы показать как ветеринар). Что я хочу знать, так это: когда выражение case попадает в первое положительное положение, выполняет ли оно какие-либо действия с записью и перемещается к следующей строке или просматривает следующее, когда и предпринимает действия, если эти условия также выполнены изменение ответа (пример: если flag1 имеет значение vet, выходные данные оператора case являются Veteran. Если бы в той же строке было слово spouse в flag3, будет ли запись изменена на Veteran Spouse?)

Ответы [ 2 ]

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

Ответ Джоэла - более безопасная логика. Но иронично, что вы можете сделать это намного проще:

select greatest(flag1, flag2, flag3)
0 голосов
/ 07 ноября 2018

То, что у вас есть, правильно. База данных оценит условия WHEN по порядку и будет использовать первое из них.

Ради интереса вы также можете написать это так:

CASE WHEN 'Vet' IN (Flag1, Flag2, Flag3) THEN 'Veteran'
     WHEN Flag3 = 'Spouse' THEN 'Veteran Spouse'
     ELSE 'Non Veteran/Spouse'
END

Еще лучше, если эти значения находятся в небольшой справочной таблице, к которой вы можете присоединиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...