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)