前事不忘,后事之师,不忘国耻!

 注册  找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3851|回复: 0

逐月对比的交叉表处理

[复制链接]

逐月对比的交叉表处理

[复制链接]
ehxz

主题

0

回帖

7123

积分

管理员

积分
7123
2007-2-5 16:07:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

将月份做为字段名,并且反映逐月增幅的交叉表处理


/*--原帖地址:
http://community.csdn.ne ... l?temp=.4308588
--*/

--测试数据
create table tb(year int,month int,No varchar(10),Name varchar(10),部门 varchar(10),工资 int)
insert tb select 2004,10,'A001','AAA','DDD',1000
union all select 2004,10,'B001','BBB','DDD',800
union all select 2004,11,'A001','AAA','DDD',1100
union all select 2004,11,'B001','BBB','DDD',1000
union all select 2004,12,'A001','AAA','DDD',1200
union all select 2004,12,'B001','BBB','DDD',1050

/*--处理要求

将月份做为字段,并且反应逐月的工资增幅,例如上面的数据要求结果如下,注意最小的年月是没有增幅的

No Name 部门 2004_10 2004_11 2004_11增幅 2004_12 2004_12增幅
------ ------ ------ --------- -------- ----------- --------- ------------
A001 AAA DDD 1000 1100 10.00% 1200 9.09%
B001 BBB DDD 800 1000 25.00% 1050 5.00%
--*/

go

--查询处理
declare @s nvarchar(4000),@i int
select @s='',@i=0
select @s=@s+','+quotename(fd)
+'=sum(case when a.year='+year
+' and a.month='+month
+' then a.工资 end)'
+case @i when 0 then ''
else ','+quotename(fd+'增幅')
+'=cast(cast(sum(case when a.year='+year
+' and a.month='+month
+' then a.工资-b.工资 end)*100.'
+'/sum(case when a.year='+year
+' and a.month='+month
+' then b.工资 end)'
+' as decimal(10,2)) as varchar)+''%'''
end,@i=@i+1
from(
select year=rtrim(year),month=rtrim(month),
fd=rtrim(year)+'_'+rtrim(month)
from tb group by year,month)a
exec('select a.No,a.Name,a.部门'+@s+'
from tb a
left join tb b on a.No=b.No and a.Name=b.Name and a.部门=b.部门
and a.year=b.year+(b.month)/12
and a.month=b.month%12+1
group by a.No,a.Name,a.部门')
go

--删除测试
drop table tb

免责申明1、欢迎访问本站,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@dbabbs.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|DBA论坛中国 ( 鲁ICP备20017503号-2 )

GMT+8, 2024-3-29 14:14 , Processed in 0.063748 second(s), 10 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表