Как я могу использовать функцию 'NVL' в таблице результатов? - PullRequest
1 голос
/ 30 июля 2009
select (t1.a + t2.b) sum
from (select (aa + bb) a from table_x where cc = 'on') t1, 
     table_y t2 
where t1.id = t2.id

Проблема в том, что когда t1 не найден, конечный результат будет нулевым;

Как сделать значение по умолчанию от t2.b до 0, если t1 не найдено?

Спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Вам нужно будет использовать подзапрос или левое соединение, если вы действительно хотите вернуть null, если он не может его найти. Вот так:

select
    nvl(
        (select (aa + bb) from table_x where cc = 'on' and id = t2.id)
    , 0) + t2.b as sum
from
    table_y t2
0 голосов
/ 30 июля 2009

альтернатива такова:

select ( nvl(sum(t1.a+t2.b),0)) 
from (select (aa + bb) a from table_x where cc='on') t1, 
      table_y t2
where t1.id = t2.id
0 голосов
/ 30 июля 2009
select (t1.a + decode(nvl(t1.a,-1),-1,0,t2.b) sum from (select (aa + bb) a from table_x where cc = 'on') t1, table_y t2 where t1.id = t2.id

Это работает? -1, возможно, придется заменить на varchar, такой как 'X', если t2.b - это выбор varchar, который, как я предполагаю, не является; глядя на дополнение здесь.

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