Есть ли более краткая версия парадигмы CASE WHEN foo.bar IS NULL THEN 0 ELSE 1 END? - PullRequest
0 голосов
/ 13 июля 2020

Цель состоит в том, чтобы просто проверить, соответствует ли поле NULL или нет, выдавая значение 1, если поле не NULL, и 0 в противном случае. Я не могу использовать здесь COALESCE, потому что, если поле не NULL, я просто хочу вернуть 1, а не значение поля.

У меня внутреннее ощущение, что есть уже функция, которая делает это - например, что-то вроде NULL_STATUS_INTEGER(foo.bar) - вместо того, чтобы записывать полный оператор CASE для CASE WHEN foo.bar IS NULL THEN 0 ELSE 1 END. Я не говорю, что версия CASE абсурдно длинная, но мне просто странно, что нет более короткого способа сделать это.

Меня в первую очередь интересуют решения, которые не ограничиваются один поставщик SQL, но я использую SAS, если есть способ c, специфичный для SAS, сделать это в PROC SQL.

1 Ответ

3 голосов
/ 13 июля 2020

Сравнения также являются логическими, возвращают истину / ложь

proc sql;
create table want as
select *, name = 'Alfred' as flag
from sashelp.class;
quit;

data want;
set sashelp.class;
flag = (name = 'Alfred');

run;

РЕДАКТИРОВАТЬ:

Другой вариант - использовать IFN () / IF C (), что делится на три условия, ЛОЖЬ, ИСТИНА, ОТСУТСТВУЕТ. IFN () / IF C () может использоваться в SQL или шаге данных в SAS.

x = ifc(name="Alfred", 1, 0, .);
...