Как мне выполнить различные инструкции SELECT на основе CASE - PullRequest
4 голосов
/ 02 июля 2010

Я столкнулся с проблемой при выполнении запросов с помощью оператора 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 --------------------------
Неверный синтаксис рядом с ключевым словом select.
Сообщение: 156, Уровень: 15, Состояние: 2
Сервер: sunsrv4z7, Линия: 2

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

Ответы [ 3 ]

4 голосов
/ 02 июля 2010

Просто поставьте открывающую и закрывающую скобки вокруг оператора 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
2 голосов
/ 20 июля 2010

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

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

2 голосов
/ 02 июля 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":)

...