--行转列
SELECT YEAR(日期字段) 年度,SUM(CASE WHEN MONTH(日期字段) =1 THEN 统计的字段 ELSE 0 END) 一月,
SUM(CASE WHEN MONTH(日期字段) =2 THEN 统计的字段 ELSE 0 END) 二月,
SUM(CASE WHEN MONTH(日期字段) =3 THEN 统计的字段 ELSE 0 END) 三月,
SUM(CASE WHEN MONTH(日期字段) =4 THEN 统计的字段 ELSE 0 END) 四月,
SUM(CASE WHEN MONTH(日期字段) =5 THEN 统计的字段 ELSE 0 END) 五月,
SUM(CASE WHEN MONTH(日期字段) =6 THEN 统计的字段 ELSE 0 END) 六月,
SUM(CASE WHEN MONTH(日期字段) =7 THEN 统计的字段 ELSE 0 END) 七月,
SUM(CASE WHEN MONTH(日期字段) =8 THEN 统计的字段 ELSE 0 END) 八月,
SUM(CASE WHEN MONTH(日期字段) =9 THEN 统计的字段 ELSE 0 END) 九月,
SUM(CASE WHEN MONTH(日期字段) =10 THEN 统计的字段 ELSE 0 END) 十月,
SUM(CASE WHEN MONTH(日期字段) =11 THEN 统计的字段 ELSE 0 END) 十一月,
SUM(CASE WHEN MONTH(日期字段) =12 THEN 统计的字段 ELSE 0 END) 十二月,
FROM 表
GROUP BY YEAR(日期字段)
--列转行
create table #temp_Month(monthid int)
select *from #temp_Month
insert into #temp_Month values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
select a.monthid as region,COUNT(MONTH (b.billdate))as count,
SUM(b.amount) as countamount
from #temp_Month a
left join (select *from o_salerecord where billdate>='2021-01-01' and billdate<='2021-06-01') b on month(b.billdate)=a.monthid
group by
a.monthid,month(b.billdate)
order by
monthid
drop table #temp_Month
-----------------------------------------------------------------------------------------------------------
--基于业务要求加上了统计等等
create table #temp_Month(monthid int)
insert into #temp_Month values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
select a.monthid as region,SUM(b.amount) as completeamount ,c.amount ,ltrim(Convert(numeric(9,2),SUM(b.amount)*100.0/c.amount))+'%' as completionrate
from #temp_Month a
left join (select *from o_salerecord where 1=1) b on month(b.billdate)=a.monthid
left join (select d.region,d.amount from o_saleplandetail d left join o_saleplan e on d.id=e.id where d.id=25) c on rtrim(c.region)=a.monthid
group by a.monthid,month(b.billdate),c.amount
order by monthid
drop table #temp_Month