значение поля карты и сохранение нулей - PullRequest
0 голосов
/ 14 октября 2019

Я хочу отобразить значения (не нулевые), которые соответствуют определенному значению, в 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

наверняка есть лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Нет необходимости во вложенном выражении:

SELECT CASE 
         WHEN foodid is NULL THEN NULL
         WHEN foodid = 16 THEN 1
         ELSE 0
       END As FooMapping
FROM  foo
0 голосов
/ 14 октября 2019

Вы также можете сформулировать это как:

SELECT (CASE WHEN FooId = 16 THEN 1
             WHEN FooId IS NOT NULL THEN 0
        END) AS FooMapping 
FROM Foo

Значение по умолчанию для выражения CASE без ELSE равно NULL, поэтому, если вы расположите логику подобным образом, вы можете обойтись безлюбой ELSE.

0 голосов
/ 14 октября 2019

Я думаю, что это должно выглядеть следующим образом (протестировано в Oracle DB):

select decode(FooId,null,null,16,1,0) AS FooMapping
from Foo

Что он делает в основном:

, когда FooId равен нулю, тогда ноль

, когдаFooId = 16, затем 1

по умолчанию = 0

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