Правильное использование вложенной инструкции Case в инструкции SQL - PullRequest
6 голосов
/ 22 марта 2011

Добрый день,

В настоящее время я работаю над кодом postgresql и перевожу его на sql (большинство, если он довольно простой), но я наткнулся на оператор case с массивом в нем и не могу понять правильный синтаксис, так как никогда раньше не встречал оператора case, используемого таким образом.

Я сделал быстрый пример того, что я пытаюсь сделать, но все равно выдает синтаксическую ошибку:

Select field3, field 4, 
Case 
    When field in (1, 3, 7) then 1
    When field in (2, 4, 6) then 2
    When field in (5, 9) then 3
    When field is null or ' ' then 4
Else
Case
    When field2 = x then 1
    When field2 = y then 2
Else End
End as fieldname

Вот оригинальный код, чтобы вы могли видеть, с чего я его редактирую. Оператор case (насколько я могу судить, как я уже упоминал ранее, я никогда не использовал case таким образом) использует 2 поля для получения желаемых результатов. Обратите внимание, что я не писал это изначально, а только переношу его из postgresql в t-sql.

CASE 
    WHEN rank IN (1,7,9) THEN  '1'
    WHEN rank IN (2,5,10) THEN '2' 
    WHEN rank IN (3,6) THEN '3'
    WHEN rank IN (4,8) THEN '4'
    WHEN tier IS NULL OR tier = '' THEN 'N/A' ELSE 
CASE WHEN tier = 'HE' THEN '3'
    WHEN tier = 'ME' THEN '2'
    WHEN tier = 'LE' THEN '1' END
END AS tier

После работы с ответами ниже (один из них был опечаткой с моей стороны), теперь я получаю синтаксическую ошибку в предложении "Else End".

Я изменил вопрос так, чтобы утверждать, что это вопрос о вложенном операторе case, а не массиве спасибо

Ответы [ 3 ]

7 голосов
/ 22 марта 2011
Case
  When field in (1, 3, 7) then 1
  When field in (2, 4, 6) then 2
  When field in (5, 9) then 3
  When field is null or ' ' then Case
    When field2 = x then 1
    When field2 = y then 2
  End --inner case
  Else null
End as fieldname 

неправильно ли я использую термин «массив» в этом примере?

Да.

2 голосов
/ 22 марта 2011
  1. Вы пропустили ТОГДА для дела When field is null or ' '.
  2. Этот случай, упомянутый выше, должен быть записан как When field is null or field = ' '
  3. Вам не хватает END для внутреннего оператора CASE в ELSE.
1 голос
/ 22 марта 2011

Предложения ELSE выглядят избыточными:

CASE 
   WHEN field IN (1, 3, 7) THEN 1
   WHEN field IN (2, 4, 6) THEN 2
   WHEN field IN (5, 9) THEN 3
   WHEN field IS NULL THEN 4
   WHEN field2 = x THEN 1
   WHEN field2 = y THEN 2
END AS fieldname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...