2013-09-24 3 views
2

Я хочу использовать следующее заявлениеЕсли оператор с условным подзапроса

DECLARE @MatnrFilter TABLE (ListValue VARCHAR(50)) 

INSERT INTO @MatnrFilter 
    (ListValue) 
VALUES ('167436') 
INSERT INTO @MatnrFilter 
     (ListValue) 
VALUES ('167447') 

SELECT * 
FROM ios.BaseData_2013 
WHERE Materialnummer IN (CASE WHEN ((SELECT TOP 1 
               ListValue 
             FROM  @MatnrFilter 
            ) IS NULL) THEN Materialnummer 
          ELSE (SELECT * 
            FROM @MatnrFilter 
           ) 
         END) 

Я хочу, чтобы фильтровать только тогда, когда есть значения в @MtnrFilter. Здесь я получаю сообщение об ошибке

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

Есть ли другой способ сделать это?

Танки Andi

+0

посмотрите здесь: ELSE (SELECT * – bummi

ответ

1
WHERE Materialnummer IN (SELECT ListValue FROM @MatnrFilter) 
OR NOT EXISTS (SELECT * FROM @MatnrFilter) 

Казалось бы, чтобы скрыть это. A CASE выражение должно возвращать одно скалярное значение (для каждой строки).

0

Изменение WHERE заявление на следующее:

WHERE NOT EXISTS(SELECT ListValue FROM @MatnrFilter) 
     OR Materialnummer IN (SELECT ListValue FROM @MatnrFilter) 
Смежные вопросы