我有这样的查询
select distinct
tran_date,
ZONE_NAME,
ROUND (nvl(sum(WALKIN_WITHOUT_CGROUP),0)/ COUNT(*),2)APC,
ROUND((nvl(SUM(SALES_VALUE),0)+nvl(sum(total_sales),0)-nvl(sum(net_sales),0)+nvl(sum(discount),0))/nvl(sum(BILLS_WITHOUT_CGROUP),0))ASPB,
from OUTLET_PAYMODE_REPORT_FACT A,OUTLET_DETAILS B
WHERE A.OUTLET_ID=B.OUTLET_ID and SALES_VALUE>0
group by zone_name,tran_date
我的问题是我有一个日期字段,如 tran_date格式=== dd-mmm-yyyy ,我必须按日期字段分隔列值,我在下面提到
例如:
2012-AUG ||2013-AUG || 2013-JULY
previous year|| current month || last month
100 || 200 || 150
120 || 300 || 500
etc...
etc...
如何为此分隔列和框架查询?
答案 0 :(得分:1)
假设tran_date
是您想要转动的,它确实是一个日期,您可以这样做:
select zone_name,
sum(case when tran_date between trunc(add_months(sysdate, -12), 'month') and
trunc(add_months(sysdate, -11), 'month')
then APC
end) as PrevYear,
sum(case when tran_date between trunc(add_months(sysdate, 0), 'month') and
trunc(add_months(sysdate, 0), 'month')
then APC
end) as CurerntMonth,
sum(case when tran_date between trunc(add_months(sysdate, -1), 'month') and
trunc(add_months(sysdate, -1), 'month')
then APC
end) as LastMonth
from (select tran_date, ZONE_NAME,
ROUND (nvl(sum(WALKIN_WITHOUT_CGROUP),0)/ COUNT(*),2) as APC,
ROUND((nvl(SUM(SALES_VALUE),0)+nvl(sum(total_sales),0)-
nvl(sum(net_sales),0)+nvl(sum(discount),0))/nvl(sum(BILLS_WITHOUT_CGROUP),0)
) as ASPB
from OUTLET_PAYMODE_REPORT_FACT A join
OUTLET_DETAILS B
on A.OUTLET_ID=B.OUTLET_ID
where SALES_VALUE>0
group by zone_name,tran_date
) t
group by ZONE_NAME;
如果日期确实是字符串格式,请将其转换为日期,然后按照相同的方法。