Как выполнять разные операторы SELECT на основе CASE

Я столкнулся с проблемой выполнения запросов с оператором CASE. В зависимости от моего состояния (например, длины) я хочу выполнить другой оператор SQL.

Проблемный пример запроса выглядит следующим образом:

select case 
    when char_length('19480821') = 8
        then select count(1) from Patient
    when char_length('19480821')=10
        then select count(1) from Doctor 
end

Исключение:

[Ошибка] Строки скрипта: 1–5 --------------------------
Неправильный синтаксис рядом с ключевым словом «выбрать».
Сообщение: 156, Уровень: 15, Состояние: 2
Сервер: sunsrv4z7, Строка: 2

Я не могу исправить синтаксис. Я получаю строку для char_length в качестве ввода от пользователя. Как я могу запускать запросы на основе определенных условий? Является ли CASE правильным выбором? Или я должен использовать что-то еще.


person surbhit4u    schedule 02.07.2010    source источник


Ответы (4)


Просто поместите открывающую и закрывающую скобку вокруг оператора select, чтобы решить проблему.

select 
    case when 
        char_length('19480821')=8 then 
            (select count(1) from Patient )
        when 
        char_length('19480821')=10 then 
            (select count(1) from Doctor )
      end
person Pranay Rana    schedule 02.07.2010

select 
  case when char_length('19480821')=8 then (select count(1) from Patient)
        when char_length('19480821')=10 then (select count(1) from Doctor)
    end

Проблема в том, что вам не хватает открывающих и закрывающих скобок во вложенных операторах Select :)

person VoodooChild    schedule 02.07.2010
comment
возможно, вы захотите переместить открывающие скобки во втором предложении, а затем на одно слово вправо. - person potatopeelings; 02.07.2010
comment
все еще есть синтаксическая ошибка, потому что в третьей строке находится внутри скобки - person Pranay Rana; 02.07.2010

Пожалуйста, обратите внимание, что это не ЗАЯВЛЕНИЕ о случае, это ВЫРАЖЕНИЕ случая. Заключая запросы в круглые скобки, вы преобразуете их (синтаксически) в значения.

В принципе это похоже на подзапрос, такой как «выберите имя из доктора, где зарплата = (выберите максимальную (зарплату) из доктора)»

person Phlamingo    schedule 20.07.2010

select 
  case when 
      LEN('1948082100')=8 then 
          (select 'HELLO' )
      when 
      LEN('194808210')=10 then 
          (select 'GOODBYE')
  end

Измените значения на результаты теста.

person Terrence Harry Holmes    schedule 02.10.2019