统计从本年开始往前12个月的数据

Oracle写法

select * from(
with t1 as(
select add_months(sysdate,-level+1) as t_date
from dual connect by level<=12
), t2 as(
select money,bill_dt from table
)
select tochar(t1.t_date,‘YYYY_MM’) months,nvl(sum(t2.money),0) amt
from t1 left join t2 on to_char(t1.t_date,‘YYYY_MM’)=to_char(t2.bill_dt,‘YYYY_MM’)
group by to_char(t1.t_date,‘YYYY_MM’)
order by to_char(t1.t_date,‘YYYY_MM’)
)
注level 默认变量
**

SqlServer写法

select convert(varchar(7),t1.t_date,120) as months,isnull(sum(t2,money),0) amt
from
(select convert(varchar(7),dateadd(mm,-t.number,getdate()),120) as t_date
from
(select number from master…spt_values where type=‘p’) t
where t.number<12
) t1
left join
(select money,bill_dt from table) t2
on convert(varchar(7),t1.t_date,120)=convert(varchar(7),t2.bill_dt,120)
group by convert(varchar(7),t1.t_date,120)
order by convert(varchar(7),t1.t_date,120)
注:master…spt_values为sql默认表 convert(varchar(7),t1.t_date,120),varchar(7)截取年月,120时间格式
**

你可能感兴趣的:(数据库)