おはよう、私の最愛のSQLウィザードと魔術師、
3つのテーブルにまたがる3列のデータを代入したいと考えています。現在NVL関数を使用していますが、これは2列に制限されています。
以下の例をご覧ください。
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]
基本的に私がやろうとしているのは、lookup_value.descrとcase_char.valueが一致する場合はそれを表示し、そうでない場合は、case_char.valueとchar_value.charが一致する場合はそれを表示することです。
Char_valueテーブルから 'issue'の説明を返そうとしていますが、 'email'の場合、lookup_valueテーブルからdescrlongを返します(すべて同じエイリアス 'char_val'の下にあります)。
だから私の質問は、同じエイリアスの下にそれらを表示したいということを心に留めて、どうやってこれを達成するのですか?.
さらに情報が必要な場合はお知らせください。
みんなありがとう
NVLをネストできます:
NVL(a, NVL(b, NVL(c, d))
しかし、さらに良いのは、SQL標準 [〜#〜] coalesce [〜#〜] を使用することです。これは複数の引数を取り、Oracle以外のシステムでも機能します。
COALESCE(a, b, c, d)
[〜#〜] coalesce [〜#〜] を使用するのはどうですか?
COALESCE(ccvl.descr, ccc.char)