Oracle условный столбец на основе одного поля запроса - PullRequest
0 голосов
/ 11 марта 2020

У меня есть следующий псевдо-регистр:

WITH SUB_Q1(
  ... COMPLEX CALCULATION  AS MYVALUE
),
SUB_Q2(
  ... COMPLEX CALCULATION  AS MYVALUE
)

SELECT 
    *
FROM MAIN_TABLE

И мне нужно добавить MYVALUE к окончательному запросу. MYVALUE является условным внутри MAIN_TABLE, т. Е. Если столбец XPTO равен NULL, я хочу значение из SUB_Q1, иначе значение из SUB_Q2

Единственный способ, которым мне удалось заставить его работать, был:

SELECT
   MAIN.*,
   DECODE (XPTO, NULL, SUB_Q1.MYVALUE, SUB_Q2.MYVALUE) AS MYVALUE,
FROM MAIN_TABLE
LEFT JOIN SUB_Q1 ON..
LEFT JOIN SUB_Q2 ON..

Однако это имеет узкое место в производительности, так как сложные вычисления SUB_Q1 и SUB_Q2 выполняются, когда в каждой строке действительно требуется только один из них.

Пожалуйста, сообщите. Спасибо

1 Ответ

0 голосов
/ 11 марта 2020

Как насчет манипулирования условием JOIN с использованием XPTO следующим образом:

SELECT
   MAIN.*,
   DECODE (XPTO, NULL, SUB_Q1.MYVALUE, SUB_Q2.MYVALUE) AS MYVALUE,
FROM MAIN_TABLE
LEFT JOIN SUB_Q1 ON XPTO is null and ..
LEFT JOIN SUB_Q2 ON XPTO is not null and ..

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...