对多列使用 NVL - Oracle SQL

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24501915/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 02:09:14  来源:igfitidea点击:

Using NVL for multiple columns - Oracle SQL

sqloraclecoalescenvl

提问by Heisenberg

Good morning my beloved sql wizards and sorcerers,

早上好,我亲爱的 sql 巫师和巫师,

I am wanting to substitute on 3 columns of data across 3 tables. Currently I am using the NVL function, however that is restricted to two columns.

我想替换 3 个表中的 3 列数据。目前我正在使用 NVL 函数,但仅限于两列。

See below for an example:

请参阅下面的示例:

    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]

Essentially what I am trying to do is if there exists a match for case_char.value with lookup_value.descr then display it, if not, then if there exists a match with case_char.value and char_value.char then display it.

基本上我想要做的是,如果 case_char.value 与 lookup_value.descr 存在匹配,则显示它,如果没有,则如果存在与 case_char.value 和 char_value.char 的匹配,则显示它。

I am just trying to return the description for 'issue'from the char_value table, but for 'email' I want to return the descrlong from the lookup_value table (all under the same alias 'char_val').

我只是想从char_value 表中返回'issue' 的描述,但是对于'email',我想从lookup_value 表中返回descrlong(都在同一个别名'char_val'下)。

So my question is, how do I achieve this keeping in mind that I want them to appear under the same alias.

所以我的问题是,我如何实现这一点,请记住我希望它们出现在相同的别名下。

Let me know if you require any further information.

如果您需要任何进一步的信息,请告诉我。

Thanks guys

谢谢你们

回答by Thilo

You could nest NVL:

你可以嵌套 NVL:

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

But even better, use the SQL-standard COALESCE, which does take multiple arguments and also works on non-Oracle systems:

但更好的是,使用 SQL 标准COALESCE,它接受多个参数并且也适用于非 Oracle 系统:

COALESCE(a, b, c, d)

回答by Linger

How about using COALESCE:

如何使用COALESCE

COALESCE(ccvl.descr, ccc.char)