DB2: Как фильтровать на основе результата, полученного из условия CASE - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь отфильтровать данные на основе результатов, полученных из предыдущего условия CASE в DB2:

Ниже приведен исходный запрос для фильтрации данных:

SELECT EM.NAME,EM.ID,EM.DIV
CASE DEPT
WHEN '1' THEN 'FIN'
WHEN '2' THEN 'MKT'
WHEN '3' THEN 'IT'
WHEN '4' THEN 'HR' END AS DEPT_DESC
FROM EMPLOYEE_RCD EM;

ПримерДанные:

NAME    ID    DIV   DEPT_DESC
MICHAEL 3334   3    IT
SAMUEL  100922 1    FIN
ORINDA  7363   1    FIN
SARA    8383   2    MKT
RACHAEL 8383   4    HR
MARTIN  33312  
SUZY    993    NA   NA
MIKE    576    NULL NULL

То, что я пытался отфильтровать результаты:

SELECT EM.NAME,EM.ID,EM.DIV
CASE DEPT
WHEN '1' THEN 'FIN'
WHEN '2' THEN 'MKT'
WHEN '3' THEN 'IT'
WHEN '4' THEN 'HR' END AS DEPT_DESC
CASE DEPT_DESC
WHEN DEPT_DESC == ''   THEN 'No Dept'
WHEN DEPT_DESC == NA   THEN 'No Dept'
WHEN DEPT_DESC == NULL THEN 'No Dept'
FROM EMPLOYEE_RCD EM;

, но не получал результаты вместо того, чтобы получать ошибки:

[Code: -104, SQL State: 42601]  An unexpected token "== ''" was found following "WHEN DEPT_DESC".  Expected tokens may include:  "<space>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.22.29

Любая помощь в,как отфильтровать данные и получить следующий результат:

Ожидаемый 0 / P:

NAME    ID    DIV   DEPT_DESC
MARTIN  33312  
SUZY    993    NA   NA
MIKE    576    NULL NULL

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

В приведенном примере вам нужен только один оператор case

SELECT  EM.NAME
,       EM.ID
,       EM.DIV
,       CASE DEPT
            WHEN '1' THEN 'FIN'
            WHEN '2' THEN 'MKT'
            WHEN '3' THEN 'IT'
            WHEN '4' THEN 'HR' 
                     ELSE 'No Dept' END AS DEPT_DESC
FROM
    EMPLOYEE_RCD EM

Кстати, если вы используете редактор SQL, который может анализировать ваш SQL по мере его написания (например, бесплатный IBM Data Studio), онлегче обнаружить и исправить синтаксические ошибки.

0 голосов
/ 18 октября 2018

Вы используете CASE неправильный путь:

  • Каждое предложение WHEN должно сопровождаться условием [логическое значение].
  • Используйте одинаковое равенство = для равенства, а не двойное равенство ==.
  • Если вы хотите использовать предварительно вычисленный столбец для его повторной обработки, вы можете использовать подзапрос.

Ваш запрос должен выглядеть примерно так:

select name, id, div,
    CASE
    WHEN DEPT_DESC = ''   THEN 'No Dept'
    WHEN DEPT_DESC = NA   THEN 'No Dept'
    WHEN DEPT_DESC = NULL THEN 'No Dept'
    END as dept_desc
  from ( -- subquery runs first
    SELECT EM.NAME,EM.ID,EM.DIV
    CASE 
    WHEN DIV = '1' THEN 'FIN'
    WHEN DIV = '2' THEN 'MKT'
    WHEN DIV = '3' THEN 'IT'
    WHEN DIV = '4' THEN 'HR' END AS DEPT_DESC
    FROM EMPLOYEE_RCD EM
  ) x    
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...