условное место, где Sql server

#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