我试图使用union来总结三个查询的计数。这些查询还包含其中的group by子句。以下是我写的查询:
select
extract(year from start_date),
extract(month from start_date),
APPLICATION_TYPE,
sum(TOTAL) as Overall_TOTAL
from (
select
extract(year from A.start_date) as Start_Year,
extract(month from A.start_date) as Start_Month,
A.APPLICATION_TYPE as Type,
count(A.TRANSACTION_NUMBER) as Total
from lnr_application A
where
A.START_DATE >= to_date('&sdate','DD/MM/YYYY')
and A.START_DATE <= to_date('&edate','DD/MM/YYYY')
and A.permission_type = 'HRW'
and A.status_cd in ('AP')
group by extract(year from start_date), extract(month from start_date), A.APPLICATION_TYPE
union all
select
extract (year from A.tstamp) as Start_Year,
extract (month from A.tstamp) as Start_Month,
A.application_type as Type,
count(A.transaction_number) as Total
from lnr_application A
where
A.permission_type = 'HRW'
and A.status_cd in ('RF')
and trunc(A.tstamp) >= to_date ('&sdate','dd/mm/yyyy')
and trunc(A.tstamp) <= to_date ('&edate','dd/mm/yy')
group by extract (year from A.tstamp), extract (month from A.tstamp), A.application_type
union all
select
extract (year from A.tstamp) as Start_Year,
extract (month from A.tstamp) as Start_Month,
A.application_type as Type,
count(A.transaction_number) as Total
from lnr_application A
where
A.permission_type = 'HRW'
and A.status_cd in ('CL')
and trunc(A.tstamp) >= to_date ('&sdate','dd/mm/yyyy')
and trunc(A.tstamp) <= to_date ('&edate','dd/mm/yy')
group by extract (year from A.tstamp), extract (month from A.tstamp), A.application_type
) tmp
group by extract(year from start_date), extract(month from start_date), APPLICATION_TYPE
order by extract(year from start_date), extract(month from start_date), APPLICATION_TYPE
当我执行查询时,收到Start_Date
是无效标识符的错误消息。如果我从顶部删除sum组件,即只联合所有三个查询,我得到以下结果:
2011 7 A 627
2011 7 A 21
2011 7 A 1
2011 7 C 1585
2011 7 C 1
2011 7 I 1
2011 7 I 154
2011 7 I 3
我想总计各年,月和申请类型的总和,如下所示:
2011 7 A 649
2011 7 C 1586
2011 7 I 158
有人可以帮帮我吗?
答案 0 :(得分:1)
在union的SELECT语句中,您需要使用Start_Year和Start_Month而不是EXTRACT语句。此外,使用Type而不是Application_Type。
答案 1 :(得分:1)
您可以将三个联合所有子查询合并为一个查询,然后您不需要额外的内联视图,从而导致这个简单的查询:
select extract(year from a.start_date)
, extract(month from a.start_date)
, a.application_type
, sum(a.total) as overall_total
from lnr_application a
where a.permission_type = 'HRW'
and a.status_cd in ('AP','RF','CL')
and a.tstamp between to_date('&sdate','dd/mm/yyyy') and to_date('&edate','dd/mm/yyyy') + interval '1' day - interval '1' second
group by extract(year from a.start_date)
, extract(month from a.start_date)
, a.application_type
order by extract(year from a.start_date)
, extract(month from a.start_date)
, a.application_type
通过使用trunc(...,'mm')而不是两次提取来简化更多:
select extract(year from trunc(a.start_date,'mm'))
, extract(month from trunc(a.start_date,'mm'))
, a.application_type
, sum(a.total) as overall_total
from lnr_application a
where a.permission_type = 'HRW'
and a.status_cd in ('AP','RF','CL')
and a.tstamp between to_date('&sdate','dd/mm/yyyy') and to_date('&sdate','dd/mm/yyyy') + interval '1' day - interval '1' second
group by trunc(a.start_date,'mm')
, a.application_type
order by trunc(a.start_date,'mm')
, a.application_type
的问候,
罗布。
答案 2 :(得分:0)
select
Start_Year,
Start_Month,
APPLICATION_TYPE,
sum(TOTAL) as Overall_TOTAL
from (
select
extract(year from A.start_date) as Start_Year,
extract(month from A.start_date) as Start_Month,
A.APPLICATION_TYPE as Type,
count(A.TRANSACTION_NUMBER) as Total
from lnr_application A
where
A.START_DATE >= to_date('&sdate','DD/MM/YYYY')
and A.START_DATE <= to_date('&edate','DD/MM/YYYY')
and A.permission_type = 'HRW'
and A.status_cd in ('AP')
group by extract(year from start_date), extract(month from start_date), A.APPLICATION_TYPE
union all
select
extract (year from A.tstamp) as Start_Year,
extract (month from A.tstamp) as Start_Month,
A.application_type as Type,
count(A.transaction_number) as Total
from lnr_application A
where
A.permission_type = 'HRW'
and A.status_cd in ('RF')
and trunc(A.tstamp) >= to_date ('&sdate','dd/mm/yyyy')
and trunc(A.tstamp) <= to_date ('&edate','dd/mm/yy')
group by extract (year from A.tstamp), extract (month from A.tstamp), A.application_type
union all
select
extract (year from A.tstamp) as Start_Year,
extract (month from A.tstamp) as Start_Month,
A.application_type as Type,
count(A.transaction_number) as Total
from lnr_application A
where
A.permission_type = 'HRW'
and A.status_cd in ('CL')
and trunc(A.tstamp) >= to_date ('&sdate','dd/mm/yyyy')
and trunc(A.tstamp) <= to_date ('&edate','dd/mm/yy')
group by extract (year from A.tstamp), extract (month from A.tstamp), A.application_type
) tmp
group by Start_Year,
Start_Month,
APPLICATION_TYPE
order by Start_Year,
Start_Month,
APPLICATION_TYPE