[英]Using NVL for multiple columns - 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.value 與 lookup_value.descr 存在匹配,則顯示它,如果沒有,則如果存在與 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)
由於以下原因,最好使用 COALESCE(a, b, c, d):
嵌套 NVL 邏輯可以在單個 COALESCE(a, b, c, d) 中實現。
使用 COALESCE 是 SQL 標准。
COALESCE 提供了更好的性能,NVL 總是首先計算使用的兩個查詢,然后比較第一個值是否為空,然后返回第二個值。 但是在 COALESCE 函數中,它會一一檢查並在發現非空值時返回響應,而不是執行所有使用過的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.