где условие не рассчитывать, если какое-то поле пустое - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть таблица, подобная приведенной ниже:

               Table Value
-----------------------------------------
id    attribute1   attribute2   attribute3   active
232       A           null          B           Y
486      null          A           null         N
986      null         null         null         Y
509       B            C            D           N
824      null          B            C           Y
712       A            C           null         N

Мне нужно получить id = 232,824 и создать такой запрос:

select id 
from value 
where active = 'Y' 
and attribute1 is not null 
or attribute2 is not null 
or attribute3 is not null

, но он не работает.

и я перепутал без использования идентификатора где условие .И мне нужно создать, где условие с этим атрибутом и активным флагом (только не получить идентификатор, если все атрибуты нулевые) ..

Ответы [ 5 ]

0 голосов
/ 26 апреля 2018

Вы заявляете, что хотите запрос, который извлекает идентификаторы 232 и 824 из вашего набора тестовых данных.

Вот так:

select id 
  from value 
 where attribute2='B'
    or attribute3='B';
0 голосов
/ 26 апреля 2018

Надеюсь, я понял ваш вопрос.Вы хотите, чтобы все строки, где active равняется Y, а столбец атрибута не содержит null.

select *
from value
where active = 'Y'
   and attribute1 is not null
   and attribute2 is not null
   and attribute3 is not null

Это возвращает именно те 2 строки (Id 232 и 824), которые вы хотите.Вы только что испортили и с или с.

0 голосов
/ 26 апреля 2018

Вы забыли скобки

select id from value where active = 'Y' 
and (attribute1 is not null or 
attribute2 is not null or 
attribute3 is not null)
0 голосов
/ 26 апреля 2018

другим способом без использования оператора OR может быть

SELECT *
FROM value
WHERE active                                                                           = 'Y'
AND DECODE(attribute1,NULL,0,1) + DECODE(attribute2,NULL,0,1)+DECODE(attribute3,NULL,0,1)>1;

Вот SQL-скрипка

http://sqlfiddle.com/#!4/df757/2

0 голосов
/ 26 апреля 2018

Это достаточно просто:

select count(*)
from t
where attribute1 is not null or attribute2 is not null or attribute3 is not null;

РЕДАКТИРОВАТЬ:

Вам просто нужны правильные скобки:

select count(*)
from t
where active = 'Y' and
      (attribute1 is not null or attribute2 is not null or attribute3 is not null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...