2017-01-11 3 views
-1

У меня есть следующие данные в моей таблице ProductДело в том, где условия

Proj_No Category Attribute1 
X567  SubInv No  
X946  SubInv No 
X912  US  No 

мне нужно извлечь только те строки, которые имеющие категорию столбец = SubInv и Atrribute1 = Нет

Я попытался, как

SELECT * 
FROM PRODUCTS 
WHERE CASE 
     WHEN category = 'SubInv' 
      THEN 'No' 
     ELSE NULL 
     END ATTRIBUTE1 

Для выше, я получаю

ORA-00920: недействительный реляционный оператор

Как решить эту проблему?

+0

Хорошая практика, чтобы проверить, всегда ли это «Нет», иногда это «НЕТ» или «Нет» с дополнительными пробелами ... для ответа на ваш вопрос вам нужно поставить столбец, который вы оцениваете непосредственно после ключевого слова CASE. Вам не нужно оценивать операторов WHEN и THEN. (категория случая, когда SubInv then No else null end) – Palcente

+1

Совет сегодня: не используйте выражения case в предложении WHERE, вместо этого используйте AND/OR. – jarlh

ответ

1

Вы не оценить результат вашей CASE ни с чем. Я думаю, что вы имели в виду:

SELECT * 
FROM PRODUCTS 
WHERE CASE WHEN category = 'SubInv' THEN 'No' ELSE NULL END = ATTRIBUTE1 

Но вам не нужно CASE для этого вообще. См. Другие ответы.

+0

Спасибо, это сработало отлично. Оценил. – user75ponic

+0

Ваше приветствие, но, как сказано, для такого запроса лучше использовать логику 'и/или'. – HoneyBadger

+0

@ user75ponic Почему вы используете здесь случай? вам это не нужно – GurV

2

Зачем вам нужен случай для этого.

select * 
from your_table 
where Category = 'SubInv' 
and Attribute1 = 'No'; 
1

Зачем использовать case? AND так гораздо проще и понятнее

SELECT p.* 
FROM PRODUCTS p 
WHERE category = 'SubInv' AND Atrribute1 = 'No'