Это то, что у вас есть в настоящее время (на основе таблицы Скотта EMP): поскольку нет отдела 50, вы получаете не выбранных строк (то есть air , о котором вы говорите, Я полагаю).
SQL> with your_current_query as
2 (select count(*) cnt
3 from emp
4 where deptno = &deptno
5 group by job
6 )
7 select cnt
8 from your_current_query;
Enter value for deptno: 50
no rows selected
Просто чтобы показать, что он действительно что-то возвращает, если там есть какие-то данные:
SQL> /
Enter value for deptno: 30
CNT
----------
4
1
1
SQL>
OK;теперь, чтобы сделать что-то в ситуации, когда не выбраны ни одной строки, используйте объединение с фиктивной строкой, выбранной из таблицы DUAL
:
SQL> with your_current_query as
2 (select count(*) cnt
3 from emp
4 where deptno = &deptno
5 group by job
6 )
7 select cnt
8 from your_current_query
9 -- add this: if YOUR_CURRENT_QUERY doesn't return anything, union it with
10 -- a select from dual
11 union all
12 select 0
13 from dual
14 where 0 = (select count(*) from your_current_query);
Enter value for deptno: 50
CNT
----------
0
SQL>
Итак: даже еслив отделе 50 нет сотрудников, в результате вы получили 0.
Опять же, чтобы показать, что происходит, когда есть несколько строк:
SQL> /
Enter value for deptno: 30
CNT
----------
4
1
1
SQL>
Наконец, ваш запрос -переписано - будет выглядеть так:
with your_current_query as
(select
count(*) cnt
from
sysdba.dw_cmap_arf_tmp
left join SYSDBA.TABLE1 rrc
on rrc.part_work_order = pwo
left join sysdba.TABLE2 R
on rrc.run_number = R.RUN_NUMBER
where
upper(run_type) like '%FEE%'
group by
pwo
)
select cnt from your_current_query
union all
select 0
from dual
where 0 = (select count(*) from your_Current_query);
Посмотрите, поможет ли это.