Как сделать второе поле пустым, если первое поле имеет значение в Oracle SQL - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть два вычисленных столбца в ORACLE (Ex3 и EX12).Таким образом, везде, где оба поля имеют значение (например, ID 118189AC), идентификаторы хотели бы сохранить значение в EX3, но превратить EX12 в NULL.Есть предложения?

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

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

NVL2(a, b, c) возвращает b, если a не равно нулю, c в противном случае.

В вашем случае: NVL2(ex3, null, ex12) вернет null, когда ex3 не равно нулю.В противном случае он вернет ex12.

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

0 голосов
/ 08 февраля 2019

В итоге я создал подзапрос в предложении WHERE, ограничивающий идентификаторы, возвращаемые для EX3.Спасибо всем

0 голосов
/ 08 февраля 2019

Я думаю, вы просто хотите выражение case:

select id, ex3,
       (case when ex3 is not null and ex12 is not null then null else ex12 end) as ex12
. . .
...