銷售訂單報表


有個銷售訂單數據如圖:

image

報表要求如下:

image

SQL腳本如下:

create proc [dbo].[Tecul_sp_SaleOrderSumByMonth]
as
-- 本月數據
select 產品系列 as 產品系列, SUM( 金額) as 本月銷售額, convert(varchar(6),訂單日期,112) as 訂單日期, 
CAST( convert(varchar(7),訂單日期,120)+'-1' as datetime) as 當月第一天
into #t
from tecul_vw_saleorder 
group by convert(varchar(6),訂單日期,112),產品系列,convert(varchar(7),訂單日期,120)
--去年同月數據
select t3.產品系列 as 產品系列,ISNULL( t3.本月銷售額,0) as 上年同月銷售額,t4.訂單日期 as 月份,t4.當月第一天 as 當月第一天
into #tt
from #t t3 
join #t t4 on t3.產品系列=t4.產品系列 and t3.當月第一天= DATEADD(YEAR,-1,t4.當月第一天)
--匯總數據
select b1.產品系列 as 產品系列,DATEPART(YEAR,b1.當月第一天) as 年,DATEPART(MONTH,b1.當月第一天)as 月
,ISNULL( b1.本月銷售額,0) as 本月銷售額,ISNULL( b2.上年同月銷售額,0) as 上年同月銷售額,ISNULL( b3.上月銷售額,0) as 上月銷售額
,ISNULL( b4.去年同期銷售額,0) as 去年同期銷售額,ISNULL( b5.本年同期銷售額,0) as 本年同期銷售額 , 
case when ISNULL( b3.上月銷售額,0)=0 then '' else
cast( cast( (ISNULL( b1.本月銷售額,0)-ISNULL( b3.上月銷售額,0))*100/ b3.上月銷售額 as decimal(10,2) ) as varchar(50))+'%' end as '同上月比(%)',
case when ISNULL(b2.上年同月銷售額,0)=0 then '' else
cast( cast( (ISNULL( b1.本月銷售額,0)-ISNULL( b2.上年同月銷售額,0))*100/ b2.上年同月銷售額 as decimal(10,2) ) as varchar(50))+'%' end as '同上年同月比(%)',
case when ISNULL(b4.去年同期銷售額,0)=0 then '' else
cast( cast( (ISNULL( b5.本年同期銷售額,0)-ISNULL( b4.去年同期銷售額,0))*100/ b4.去年同期銷售額 as decimal(10,2) ) as varchar(50))+'%' end as '同上年同月比(%)'
from
--本月數據
#t b1 
--去年同月數據
left join #tt b2 on b1.產品系列=b2.產品系列 and b1.當月第一天=b2.當月第一天  
--上月數據
left join
(
select t1.產品系列 as 產品系列, ISNULL( t1.本月銷售額,0) as 上月銷售額,t2.訂單日期 as 月份,t2.當月第一天 as 當月第一天 from #t t1 
join #t t2 on t1.產品系列=t2.產品系列 and t1.當月第一天= DATEADD(MONTH,-1,t2.當月第一天)
) b3 on b1.產品系列=b3.產品系列 and b1.當月第一天=b3.當月第一天
--去年同期銷售額
left join 
(   
select a1.*,( select SUM(a2.上年同月銷售額) from #tt a2 where a2.當月第一天<=a1.當月第一天 and DATEPART(YEAR,a1.當月第一天)=DATEPART(YEAR,a2.當月第一天))as 去年同期銷售額
from #tt a1
)b4 on b4.產品系列=b1.產品系列 and b4.當月第一天=b1.當月第一天
--本年同期銷售額
left join
(
select a.產品系列,a.本月銷售額,a.當月第一天,(select SUM(本月銷售額) from #t as b where b.當月第一天<=a.當月第一天 and DATEPART(YEAR,b.當月第一天)=DATEPART(YEAR,a.當月第一天))as 本年同期銷售額
from #t as a
)b5 on b1.產品系列=b5.產品系列 and b1.當月第一天=b5.當月第一天
--刪除虛擬表
drop table #t
drop table #tt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM