Оператор Cast и Case с запросом в Oracle SQL - PullRequest
0 голосов
/ 28 мая 2020

В настоящее время я редактирую представление и пытаюсь преобразовать поле "Doctorate" в значение "Да", "Нет" или "Неизвестно" на основе оператора case, который объединен двумя таблицами, а затем присоединен к представлению.

У меня есть ошибка рядом с предложением from "Expecting) или AS", но я все равно получаю сообщение об ошибке при добавлении этих символов. Любая помощь приветствуется! Спасибо

Пожалуйста, посмотрите отрывок из моего кода ниже:

 CAST (
            CASE 
                WHEN D.DEGREE_HIERARCHY >= 40 
                    THEN 'Yes'

                WHEN D.DEGREE_HIERARCHY < 40 
                    THEN 'No'

                WHEN D.DEGREE_HIERARCHY IS NULL
                    THEN 'Unknown'
                ELSE
                    NULL
            END

        FROM DEGREE_CROSSWALK D, VPAA V
            WHERE
                V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
                   AND V.PERSON_SKEY = SRC.PERSON_SKEY
                   AND V.CURRENT_DEGREE = '1'

        AS VARCHAR2 (50))
                DOCTORATE,

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Сначала завершите sh функцию приведения, приведя ее к типу данных или либо удалив приведение.

SELECT CAST((SELECT CASE WHEN D.DEGREE_HIERARCHY >= 40 
                         THEN 'Yes'
                         WHEN D.DEGREE_HIERARCHY < 40 
                         THEN 'No'
                         WHEN D.DEGREE_HIERARCHY IS NULL
                         THEN 'Unknown'
                         ELSE NULL
                         END
             FROM DEGREE_CROSSWALK D, VPAA V
             WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
             AND V.PERSON_SKEY = SRC.PERSON_SKEY
             AND V.CURRENT_DEGREE = '1') AS VARCHAR2 (50)) AS DOCTORATE
FROM DUAL
0 голосов
/ 28 мая 2020

Я считаю, что вам нужно это:

select CASE WHEN D.DEGREE_HIERARCHY >= 40 THEN 
                 cast('Yes' as varchar(20))
            WHEN D.DEGREE_HIERARCHY < 40 THEN 
                 cast('No' as varchar(20))
            WHEN D.DEGREE_HIERARCHY IS NULL THEN 
                 cast('Unknown' as varchar(20))
            ELSE
                 NULL
       END name_of_column -- Here the case clause ends and you can name the column
FROM DEGREE_CROSSWALK D --add other tables and join condition here
WHERE --add other conditions of the where clause

Также я предлагаю вам не объединять такие таблицы:

FROM DEGREE_CROSSWALK D, VPAA V
WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE

, а вот так (просто пример):

FROM DEGREE_CROSSWALK D
JOIN VPAA V ON V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
0 голосов
/ 28 мая 2020

Я не уверен, почему вы используете весь запрос внутри CAST, но ваша проблема может быть решена, если вы используете SELECT и () следующим образом: (см. Встроенные комментарии в коде)

SELECT CAST (
            (SELECT CASE -- added ( and SELECT here
                WHEN D.DEGREE_HIERARCHY >= 40 
                    THEN 'Yes'

                WHEN D.DEGREE_HIERARCHY < 40 
                    THEN 'No'

                WHEN D.DEGREE_HIERARCHY IS NULL
                    THEN 'Unknown'
                ELSE
                    NULL
            END

        FROM DEGREE_CROSSWALK D, VPAA V
            WHERE
                V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
                   AND V.PERSON_SKEY = SRC.PERSON_SKEY
                   AND V.CURRENT_DEGREE = '1') -- added ending bracket ) here

        AS VARCHAR2 (50)) FROM DUAL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...