2013-02-21 3 views
0

У меня возникла проблема с моей хранимой процедурой.Использование подзапроса внутри оператора where

Общая идея состоит в том, чтобы иметь возможность выбирать 4 параметра (которые могут быть выбраны или нет) и возвращать правильные результаты. Потому что я действительно не могу заставить это работать с двумя параметрами (идентификатор Campus обязательно) Я не потрудился делать остальные.

Проблема заключается в моем где положение

 WHERE ac.AC_Campus_ID = @CampusID AND 
      (

       ac.AC_College_ID IN (CASE @CollegeID 
       WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice) 
       ELSE @CollegeID 
       END)) 

Это является примером. Я выбираю идентификатор кампуса 1, и я выбрал идентификатор колледжа 1. Запрос вернет результаты для этих 2 параметров.

Когда я выбираю идентификатор кампуса 1 и идентификатор колледжа 0 .. Я получаю «Подзапрос возвращен более чем на 1 значение. Это недопустимо, когда подзапрос следует за =,! =, <, < =,>, > = или когда подзапрос используется как выражение. "

Когда я делаю второй ввод, я хочу получить все результаты каждого идентификатора колледжа в системе.

Любые идеи о том, как заставить это работать?

Спасибо!

ответ

3

Вот один из способов, чтобы переписать его, чтобы получить желаемые результаты: ответ

... 
WHERE ac.AC_College_ID IN (
    SELECT DISTINCT AC_College_ID 
    FROM AC_Academic_Choice 
    WHERE AC_College_ID = 
    CASE @CollegeID 
     WHEN 0 
     THEN AC_College_ID 
     ELSE @CollegeID 
    END 
) 
+0

Это помогло мне поблагодарить вас! – gmalenko

0

Try:

WHERE ac.AC_Campus_ID = @CampusID AND 
     (SELECT 1 WHERE ac.AC_College_ID IN 
      (CASE @CollegeID 
      WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice) 
      ELSE @CollegeID 
      END 
      ) 
    ) 
+0

sgeddes является лучше. – Lighthart

+0

Хорошо, спасибо! – gmalenko

Смежные вопросы