27,580
社区成员
发帖
与我相关
我的任务
分享
select t1.v_year as 当前年份,t1.v_sum as 当前年份数据,t2.v_year as 去年年份,t2.v_sum 去年数据,
t1.v_sum-t2.v_sum 差值,
cast( isnull(( cast(t1.v_sum as decimal(5,2))-cast(t2.v_sum as decimal(5,2)))/t2.v_sum,1) as decimal(10,3)) as 增长率 from
(
(
select distinct cast(vdate as char(4)) as v_year,sum(qty)over (partition by cast(vdate as char(4))) v_sum from #t
)t1 left join
(
select distinct cast(vdate as char(4)) as v_year,sum(qty)over (partition by cast(vdate as char(4))) v_sum from #t
)t2 on t1.v_year=t2.v_year+1
)
create table #t
(
id int,
vdate varchar(10),
qty int
)
insert into #t values (1,'2012-1',10);
insert into #t values (2,'2012-3',20);
insert into #t values (3,'2013-5',30);
insert into #t values (4,'2013-7',40);
insert into #t values (5,'2013-9',50)
insert into #t values (6,'2014-1',10);
insert into #t values (7,'2014-3',20);
insert into #t values (8,'2014-5',30);
insert into #t values (9,'2014-7',40);
insert into #t values (10,'2014-9',50)
select * from #t
--当年数据总数 减去 去年数据总数 在除以去年数据总数
--当他去年没有数据为0的时候就显示1
select t1.v_year as 当前年份,t1.v_sum as 当前年份数据,t2.v_year as 去年年份,t2.v_sum 去年数据,t1.v_sum-t2.v_sum 差值 from
(
(
select distinct cast(vdate as char(4)) as v_year,sum(qty)over (partition by cast(vdate as char(4))) v_sum from #t
)t1 left join
(
select distinct cast(vdate as char(4)) as v_year,sum(qty)over (partition by cast(vdate as char(4))) v_sum from #t
)t2 on t1.v_year=t2.v_year+1
)
当前年份 当前年份数据 去年年份 去年数据 差值
---- ----------- ---- ----------- -----------
2012 30 NULL NULL NULL
2013 120 2012 30 90
2014 150 2013 120 30
(3 行受影响)
--其他加减乘除的啊你自己算好了