Sql Oracle:按请求计数和分组不返回行,而返回0
我有一个查询,它统计满足条件的Sql Oracle:按请求计数和分组不返回行,而返回0,sql,oracle,Sql,Oracle,我有一个查询,它统计满足条件的acc\u ene的数量ene.ene\u type='PRCECO'和deal.deal\u scope='Y',对于给定的运行id 以下是查询: select run.run_id, 35, count(*), sysdate from dt_runs run join acc_deals deal on deal.deal_cnt_id = run.deal_cnt_id join acc_ene ene on ene.deal_id = deal.deal_
acc\u ene
的数量ene.ene\u type='PRCECO'
和deal.deal\u scope='Y'
,对于给定的运行id
以下是查询:
select run.run_id, 35, count(*), sysdate
from dt_runs run
join acc_deals deal on deal.deal_cnt_id = run.deal_cnt_id
join acc_ene ene on ene.deal_id = deal.deal_id and ene.ene_cnt_id = run.ene_cnt_id
where ene.ene_type = 'PRCECO'
and deal.deal_scope = 'Y'
and run.run_id = '&1'
group by run.run_id, 35, sysdate;
但是,当不存在这样的acc__ene
时,查询将不返回任何行,而不是返回0
。
有没有办法修改我的查询以使其返回0
我已经尝试了nvl(count(*),0)
(>不是更好)和这个查询,它似乎可以工作:
select run.run_id, 34, (select count(*) from acc_ene ene where ene.ene_type = 'PRCECO'), sysdate
from dt_runs run, acc_deals deal, acc_ene ene
where ene.deal_id = deal.deal_id
and ene.ene_cnt_id = run.ene_cnt_id
and deal.deal_scope = 'Y'
and run.run_id = '&1'
and deal.deal_cnt_id = run.deal_cnt_id
group by run.run_id, 34, sysdate;
但后来我尝试了另一个ene.ene_type='IMM'
,我知道表中有记录。它返回类型为'IMM'
的acc_ene
的总数,而不是特定运行的此类acc_ene
我做错了什么?当没有数据时,就没有结果,这就是SQL的工作方式 尝试改为使用外部联接进行更改:
select run.run_id, 35, count(ene.deal_id), sysdate
from dt_runs run
left join acc_deals deal
on deal.deal_cnt_id = run.deal_cnt_id
and deal.deal_scope = 'Y'
left join acc_ene ene
on ene.deal_id = deal.deal_id
and ene.ene_cnt_id = run.ene_cnt_id
and ene.ene_type = 'PRCECO'
where run.run_id = '&1'
group by run.run_id, 35, sys date;
或者,您只需要一次运行的数据\u id:
select min(run.run_id), 35, count(*), sysdate
from dt_runs run
join acc_deals deal on deal.deal_cnt_id = run.deal_cnt_id
join acc_ene ene on ene.deal_id = deal.deal_id and ene.ene_cnt_id = run.ene_cnt_id
where ene.ene_type = 'PRCECO'
and deal.deal_scope = 'Y'
and run.run_id = '&1';
我无法测试Oracle是否接受没有分组依据的常量,否则您可能必须使用
select min(run.run_id), min(35), count(*), min(sys date)