首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果Oracle SQL中的第一个字段有值,如何使第二个字段为空

如果Oracle SQL中的第一个字段有值,如何使第二个字段为空
EN

Stack Overflow用户
提问于 2019-02-08 04:59:16
回答 3查看 65关注 0票数 0

我在ORACLE中有两个计算列(Ex3和EX12)。因此,只要两个字段都有值(例如,ID为118189AC),id就会将该值保留在EX3中,但将EX12转换为空。有什么建议吗?

代码语言:javascript
复制
SELECT *

FROM 
(SELECT ID,

CASE
    WHEN PORT IN ('CAP')
    THEN 3
    ELSE NULL
END AS EX3,

CASE
    WHEN PORT NOT IN ('TEST1', 'TEST2', 'TEST3')
    THEN 12
    ELSE NULL
END AS EX12

FROM LAN.DETAILS)
WHERE (EX3 IS NOT NULL OR EX12 IS NOT NULL)
ORDER BY ID ASC


ID         EX3     EX12
118051PU            12
118052PU            12
118189AC    3       12
118397PU            12
118451AC    3       12
119343AC    3       12
119387PU            12
119484PU            12
119772PU            12
119997PU            12
120320AC    3       12
EN

回答 3

Stack Overflow用户

发布于 2019-02-08 05:03:31

我认为您只需要一个case表达式:

代码语言:javascript
复制
select id, ex3,
       (case when ex3 is not null and ex12 is not null then null else ex12 end) as ex12
. . .
票数 2
EN

Stack Overflow用户

发布于 2019-02-08 05:07:30

如果a不为null,则NVL2(a, b, c)返回b,否则返回c

在您的示例中:当ex3不为空时,NVL2(ex3, null, ex12)将返回null。否则将返回ex12

https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions096.htm

票数 2
EN

Stack Overflow用户

发布于 2019-02-08 05:53:05

我最终在WHERE子句中创建了一个子查询,该子查询重新检查为EX3返回的ID。谢谢大家

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54582180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档