日期:2014-05-18 浏览次数:20753 次
GSDM KJND JHYF DM JE
001 2010 1 110 50
001 2010 2 110 30
001 2011 1 110 60
001 2011 2 110 35
…
以2011年1月查询
GSDM KJND DM 本年累计 本月发生 上年本月 同比
001 2011 110 60 60 50 1.2
以2011年2月查询
GSDM KJND DM 本年累计 本月发生 上年本月 同比
001 2011 110 95 35 30 1.166666667
select gsdm,kjnd,dm, (select sum(je) from tb where jhyf<=t.jhyf) from tb t where KJND=2011 and JHYF=1
------解决方案--------------------
--GSDM KJND JHYF DM JE
;with ach as
(
select GSDM,KJND,JHYF,DM,sum(JE) as JE
from tb
group by GSDM,KJND,JHYF,DM
)
select t.GSDM,t.KJND,t.DM,
(select sum(JE) from ach where GSDM=t.GSDM and KJND=t.KJND and DM=t.DM) YJE,
sum(t.JE) as MJE,e.JE as LMJE,sum(t.JE)*1./e.JE as TP
from tb t left join ach e
on t.GSDM = e.GSDM and t.KJND = e.KJND+1 and t.JHYF = e.JHYF and t.DM = e.DM
group by t.GSDM,t.KJND,t.DM,e.JE
------解决方案--------------------
--sql2005 declare @KJND int declare @JHYF int set @KJND=2011 set @JHYF=2 select GSDM,KJND,DM,本年累计,本月发生,上月发生,cast(本月发生 as float)/cast(上月发生 as float) 同比 from ( select*,sum(je) over(partition by KJND) 本年累计,sum(je) over (partition by KJND,JHYF) 本月发生, sum(case when KJND=@KJND-1 then je else 0 end ) over (partition by JHYF) 上月发生 from t1 ) as a where KJND=@KJND and JHYF=@JHYF
------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (GSDM nvarchar(6),KJND int,JHYF int,DM int,JE int)
insert into [TB]
select '001',2010,1,110,50 union all
select '001',2010,2,110,30 union all
select '001',2011,1,110,60 union all
select '001',2011,2,110,35
select * from [TB]
DECLARE @i INT = 2010
SELECT GSDM ,
KJND ,
DM ,
[本年累计] = SUM(JE) ,
[本月发生] = SUM(CASE WHEN JHYF = DATEPART(mm, GETDATE()) THEN JE
ELSE 0
END) ,
[上月发生] = SUM(CASE WHEN DATEDIFF(mm, JHYF, GETDATE()) = 1
AND KJND = @i THEN JE
ELSE 0
END) ,
[同比] = CONVERT(FLOAT, SUM(CASE WHEN JHYF = DATEPART(mm, GETDATE())
THEN JE
ELSE 0
END) * 1.0
/ CASE WHEN SUM(CASE WHEN DATEDIFF(mm, JHYF, GETDATE()) = 1
AND KJND = @i THEN JE
ELSE 0
END) = 0 THEN 1
ELSE SUM(CASE WHEN DATEDIFF(mm, JHYF, GETDATE()) = 1
AND KJND = @i THEN JE
ELSE 0
END)
END)
FROM TB
WHERE KJND = @i
GROUP BY GSDM ,
KJND ,
DM