2013-03-12 2 views
1

Я не уверен, что не так с этой последовательностью операторов case. Я посмотрел онлайн, и синтаксис кажется правильным, но я получаю сообщение об ошибке. Любая помощь будет высоко оценена!Отсутствует ключевое слово из SELECT CASE

CASE 
when A = '1' then 
     when sequence_number = 5 then 9 
     when sequence_number = 6 then 9 
     end 
when A = '2' then 
     when sequence_number = 5 then 9 
     when sequence_number = 6 then 9 
     end 
    when A = '3' then 
     when sequence_number =7 then 9 
     when sequence_number =8 then 9 
     end 
else T.number 
end as number 
+2

вам нужен дополнительный «случай» в зависимых пунктах дела? т.е. случай, когда A = '1', а затем * случай *, когда sequence_number ... и т. д. – Mikeb

+0

сглаживание столбца с зарезервированным словом ('number'), вероятно, не очень хорошая идея. –

ответ

2

Самый простой вариант, казалось бы:

case 
    when (A in (1,2) and sequence_number in (5,6)) or 
     (A in (3 ) and sequence_number in (7,8)) 
    then 9 
    else t.number 
end 
2

Вы бы либо нужно второе CASE заявление в каждой отрасли или вам нужно будет сочетать условия

CASE 
when A = '1' and sequence_number = 5 then 9 
when A = '1' and sequence_number = 6 then 9 
when A = '2' and sequence_number = 5 then 9 
... 
else T.number 
end as number 

или

CASE 
when A = '1' then 
     case when sequence_number = 5 then 9 
       when sequence_number = 6 then 9 
     end 
when A = '2' then 
     case when sequence_number = 5 then 9 
      when sequence_number = 6 then 9 
     end 
when A = '3' then 
     case when sequence_number =7 then 9 
      when sequence_number =8 then 9 
     end 
else T.number 
end as number 
0

@mikeb правильно - вам нужен дополнительный ДЕЛО.

У меня также были проблемы с колонкой Number, проверяя это; просто угадывая, но, может быть, Oracle задыхается от него как зарезервированное слово? Если вы, как и я, получите исключение ORA-01747: invalid user.table.column, table.column, or column specification, тогда измените его на что-то вроде Num или TheNumber.

Вот обновленный СЛУЧАЙ:

CASE 
when A = '1' then 
     case 
     when sequence_number = 5 then 9 
     when sequence_number = 6 then 9 
     end 
when A = '2' then 
     case 
     when sequence_number = 5 then 9 
     when sequence_number = 6 then 9 
     end 
when A = '3' then 
     case 
     when sequence_number =7 then 9 
     when sequence_number =8 then 9 
     end 
else T.number 
end as number 
Смежные вопросы