Использование NVL для нескольких столбцов - Oracle SQL

Доброе утро, мои возлюбленные мастера и колдуны,

Я хочу заменить на 3 столбца данных по 3 таблицам. В настоящее время я использую функцию NVL, однако она ограничена двумя столбцами.

Ниже приведен пример:

    SELECT ccc.case_id,
           NVL (ccvl.descr, ccc.char)) char_val

               FROM case_char ccc, char_value ccvl, lookup_value lval1
              WHERE   
                    ccvl.descr(+) = ccc.value
                    AND ccc.value = lval1.descr (+)
                    AND ccc.case_id IN ('123'))



     case_char table
     case_id|char |value
       123  |email| work_email
       124  |issue| tim_ 



     char_value table
     char  | descr
work_email | complaint mail
    tim_   | timeliness


    lookup_value table
    descr  | descrlong
 work_email| [email protected]

По существу, я пытаюсь сделать это, если существует соответствие для case_char.value с lookup_value.descr, а затем отображает его, если нет, то, если существует совпадение с case_char.value и char_value.char, тогда отобразите его.

Я просто пытаюсь вернуть описание для "issue" из таблицы char_value, но для "email" я хочу вернуть descrlong из таблицы lookup_value (все под тем же псевдонимом "char_val" ).

Итак, мой вопрос заключается в том, как мне добиться этого, имея в виду, что я хочу, чтобы они отображались под одним и тем же псевдонимом.

Сообщите мне, если вам нужна дополнительная информация.

Спасибо, ребята,

Ответ 1

Вы можете вложить NVL:

 NVL(a, NVL(b, NVL(c, d))

Но еще лучше, используйте SQL-стандарт COALESCE, который принимает несколько аргументов, а также работает в системах, отличных от Oracle:

COALESCE(a, b, c, d)

Ответ 2

Как насчет использования COALESCE:

COALESCE(ccvl.descr, ccc.char)