Можем ли мы написать оператор case без оператора else

#sql #sql-server #sql-server-2008 #select #case

#sql #sql-сервер #sql-server-2008 #выберите #case

Вопрос:

У меня есть этот запрос:

 select case when id=1 then 'A'
when id=2 then 'B'
end 
from test
  

Это дает мне o / p как

Id
A
B
NULL
NULL
NULL

Я не хочу иметь NULL значения в своих выходных данных, я только хочу сравнить в A и B, возможно ли это в операторе case.

Комментарии:

1. В тестовой таблице 5 строк: одна с id = 1, одна с id = 2, а остальные с другим значением. Если вы не укажете какое-либо условие WHERE, результирующий набор всегда будет состоять из 5 строк. Итак, если вам нужно ограничить количество строк, вам нужно условие WHERE. Но это не связано с предложением CASE, поскольку оно (само по себе) никоим образом не ограничивает результирующий набор.

Ответ №1:

case Выражение может только манипулировать значением выражения, а не удалять строки из результата. Если вы хотите исключить null s из результата, вам нужно будет добавить where предложение:

 SELECT CASE WHEN id = 1 THEN 'A'
            WHEN id = 2 THEN 'B'
       END 
FROM   test
WHERE  id IN (1, 2) -- HERE
  

Ответ №2:

Вы можете использовать WHERE предложение для ограничения вывода.

 SELECT CASE WHEN id=1 THEN 'A'
WHEN id=2 THEN 'B'
END 
FROM test
WHERE id IN (1,2)
  

Или если вы хотите продемонстрировать какое-то другое значение вместо null использования else части внутри CASE оператора.

 SELECT CASE WHEN id=1 THEN 'A'
WHEN id=2 THEN 'B' ELSE 'Invalid'
END 
FROM test
  

Ответ №3:

Вот и все:

 select case when id=1 then 'A'
when id=2 then 'B'
end 
from test
where id is not null 
  

Или это:

 select case when id=1 then 'A'
when id=2 then 'B'
end 
from test
where id <> null
  

Комментарии:

1. Что заставляет вас думать, что id будет null? Скорее всего, это не будет null. идентификаторы обычно нет.