#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
У меня есть вопрос
select idpays,idannonce,idville
from annonces
и мне нужно сделать условное where, где idpays=1
не показывать idville
null
else для другого idpays
показа idville
null
Как я могу это сделать, пожалуйста?
с уважением
Ответ №1:
Вы можете искать это
WHERE ( idpays = 1 AND idville NOT NULL) OR idpays > 1
Комментарии:
1. Я думаю, что это правильно, но ваш ответ предполагает, что idpays — это все положительные числа; если это не так, то idpays<>1 будет правильным вторичным условием.
Ответ №2:
Если ваш idpays
столбец содержит NULL
значение:
select idpays,idannonce,idville
from annonces
where (idpays = 1 AND idville IS NOT NULL) OR (ISNULL(idpays, 0) <> 1)
Если вы ищете НЕ нулевые значения для idpays = 1 и только нулевые значения для idpays <> 1.
select idpays,idannonce,idville
from annonces
where (idpays = 1 AND idville IS NOT NULL) OR (ISNULL(idpays, 0) <> 1 AND idville IS NULL)
Ответ №3:
Вы не указываете, что именно должно отображаться, когда idpays=1, но вот основа для того, что вы спросили — вы можете сделать это с помощью case в SELECT, который больше похож на проблему, которую вы описали, а не на предложение where:
select idpays,idannounce,
case when idpays=1 then idville
else null end
from unknowntable
РЕДАКТИРОВАТЬ на основе комментариев OP — должен признать, я не уверен, что точно понимаю требования OP на данный момент:
select
from table
where (idpays<>1) or
(idpays=1 and idville not null)
Комментарии:
1. У меня есть 10 сообщений с Idpays = 1: 5 idville nul и 5 not null, 10 сообщений с idpays! = 1, мне нужно получить 10 сообщений с idpays! = 1 и 5 с idpays 5 и idville not null
2. Отредактировано как можно лучше, я интерпретировал ваши требования. Вы хотите сказать, что ищете записи с idpays= 5?
Ответ №4:
Попробуйте использовать функцию CASE. Я не думаю, что вам вообще нужен оператор ELSE:
SELECT idpays, iddonance,
CASE WHEN idpays = 1 THEN idville END AS idville
FROM annonces