Я хочу отобразить значения (не нулевые), которые соответствуют определенному значению, в bool, если они соответствуют определенному значению, но сохраняют NULL.
(это Microsoft SQL Server)
Это работает, но очень уродливо ...
SELECT CASE WHEN FooId IS NULL THEN NULL ELSE CASE WHEN FooId = 16 THEN 1 ELSE 0 END END AS FooMapping FROM Foo
наверняка есть лучший способ сделать это?
Нет необходимости во вложенном выражении:
SELECT CASE WHEN foodid is NULL THEN NULL WHEN foodid = 16 THEN 1 ELSE 0 END As FooMapping FROM foo
Вы также можете сформулировать это как:
SELECT (CASE WHEN FooId = 16 THEN 1 WHEN FooId IS NOT NULL THEN 0 END) AS FooMapping FROM Foo
Значение по умолчанию для выражения CASE без ELSE равно NULL, поэтому, если вы расположите логику подобным образом, вы можете обойтись безлюбой ELSE.
CASE
ELSE
NULL
Я думаю, что это должно выглядеть следующим образом (протестировано в Oracle DB):
select decode(FooId,null,null,16,1,0) AS FooMapping from Foo
Что он делает в основном:
, когда FooId равен нулю, тогда ноль
, когдаFooId = 16, затем 1
по умолчанию = 0