#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. идентификаторы обычно нет.