我在ORACLE中有两个计算列(Ex3和EX12)。因此,只要两个字段都有值(例如,ID为118189AC),id就会将该值保留在EX3中,但将EX12转换为空。有什么建议吗?
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发布于 2019-02-08 05:03:31
我认为您只需要一个case表达式:
select id, ex3,
(case when ex3 is not null and ex12 is not null then null else ex12 end) as ex12
. . .发布于 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
发布于 2019-02-08 05:53:05
我最终在WHERE子句中创建了一个子查询,该子查询重新检查为EX3返回的ID。谢谢大家
https://stackoverflow.com/questions/54582180
复制相似问题