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

Доброе утро, мои любимые мастера 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| xxx@blah.com

по существу, то, что я пытаюсь сделать, это если существует соответствие для case_char.значение значению искомое_значение.descr затем отобразит его, если нет, то если существует совпадение с case_char.значение и char_value.пеструшка тогда покажите его.

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

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

Дайте мне знать, если вам потребуется дополнительная информация.

Спасибо, ребята!--2-->

2 ответов


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

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

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

COALESCE(a, b, c, d)

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

COALESCE(ccvl.descr, ccc.char)