对多列使用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| [email protected]

本质上,我想做的是如果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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章