select trim(man_date_created) createddate,count(*) recordcount
from man
where man_status IN ('received','acknowledge')
我希望每个人的数量都像是接受的数量,提交的数量。我怎么能提取它?
答案 0 :(得分:1)
使用条件聚合:
select trim(man_date_created) createddate,
count(*) recordcount,
count(case when man_status = 'ACCEPTED' then 1 end) as accepted,
count(case when man_status = 'SUBMITTED' then 1 end) as submitted,
count(case when man_status = 'CREATED' then 1 end) as created,
count(case when man_status = 'REJECTED' then 1 end) as rejected
from man
where man_status IN ('ACCEPTED','SUBMITTED','CREATED','REJECTED')
group by man_date_created
答案 1 :(得分:0)
我只是做GROUP BY
。 (使用派生表中的trim
部分,以符合ANSI SQL。)
select createddate, man_status, count(*)
from
(
select trim(man_date_created) createddate, man_status
from man
where man_status IN ('ACCEPTED','SUBMITTED','CREATED','REJECTED')
)
group by createddate, man_status
答案 2 :(得分:0)
假设即使它们为零也需要计数,请使用left join
代替in
:
select s.status, count(man.man_status) as recordcount
from (select 'ACCCEPTED' as status from dual union all
select 'SUBMITTED' as status from dual union all
select 'CREATED' as status from dual union all
select 'REJECTED' as status from dual union all
) s left join
man
on man.man_status = s.status
group by s.status;
包含日期也会使查询复杂化。