簡體   English   中英

對多列使用 NVL - Oracle SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM