2012-05-08 2 views
0

У меня возникли проблемы с этим случаем. Я не знаю, что я делаю неправильно, но получаю ошибку:Устранение неполадок с оператором case

Только одно выражение может быть указано в списке выбора, если подзапрос не вводится с EXISTS.

У меня есть случай, когда поле равно значению, а затем левое внешнее объединение, но если поле равно другому значению, тогда сделайте внутреннее соединение. Это мой запрос:

SELECT
case when oqt = '26' then

(Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.* FROM OQMethods QM left outer join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 WHERE QM.id_oqt in (SELECT tempoq.oqt FROM tempoq INNER JOIN OQMethods ON tempoq.oqt = OQMethods.id_oqt)and active = 1) END, case when oqt = '31' then (Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.* FROM OQMethods QM inner join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 where QM.id_oqt in (SELECT tempoq.oqt FROM tempoq INNER JOIN OQMethods ON tempoq.oqt = OQMethods.id_oqt) and active = 1) END from tempoq
+0

Вы пытаетесь поставить более одного столбца (и более одной строки также, по-видимому) на один столбец, конечно, он пошлет ошибку – Lamak

ответ

4

Дело выражение, которое должно вычисляться значения. Операторы Select, в которых вы возвращаете несколько значений.

Казалось бы, вы пытаетесь использовать Case, как переключатель C#? Если это так, то вам, скорее всего, будет выгодно построить IF ELSE IF.

2

Похоже, вы хотите сделать что-то подобное, а не использовать инструкцию CASE.

DECLARE @t int 
-- This would contain your oqt value 
SET @t =1 


IF @t = 1 
BEGIN 
    SELECT * FROM tableA 
END 
ELSE IF @t = 2 
BEGIN 
    SELECT * FROM TableB 
END 
0
Select qm.id_oqm, cast(isNull(id_eval, '') as varChar(50)) + ' - ' + qm.methodName as methodName, qm.methodName as actualMethod,cv.* 
FROM OQMethods QM 
inner join tempoq on tempoq.oqt = QM.id_oqt 
left outer join courseversions cv on cv.evalid = QM.id_eval and cv.courselanguage = 'EN' and cv.courseactive='Y' and cv.id_cp > 0 
WHERE active = 1 and (tempoq.oqt = '26' or (tempoq.oqt = '31' and courseversions.* is not null)) 

left outer join средства присоединиться OQMethods «s данные, которые даже не ровня данные courseversions, затем фильтровать данные с нулевым courseversions.*, который inner join.

Надеюсь, у меня есть правильное понимание.

+0

Спасибо, все хорошо, но я могу иметь больше, чем oqt-значения, у меня есть для определения формулы if if, когда эти значения равны 26 или 31. –

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