您的位置:首页 > 数据库

经常用到的交叉表问题 一般用动态SQL能生成动态列

2008-04-18 15:26 253 查看
原始表如下格式:

ClassCallDateCallCount
12005-8-8 40
12005-8-7 6
22005-8-877
32005-8-9 33
32005-8-8 9
32005-8-7 21
根据Class的值,按日期分别统计出CallCount1,CallCount2,CallCount3。当该日期无记录时值为0,
要求合并成如下格式:

CallDateCallCount1CallCount2CallCount3
2005-8-90033
2005-8-840779
2005-8-76021
创建测试环境:


Create table T (Class varchar(2),CallDate datetime, CallCount int)


insert into T select '1','2005-8-8',40


union all select '1','2005-8-7',6


union all select '2','2005-8-8',77


union all select '3','2005-8-9',33


union all select '3','2005-8-8',9


union all select '3','2005-8-7',21

动态SQL


declare @s varchar(8000)


set @s='select CallDate '


select @s=@s+',[CallCount'+Class+']=sum(case when Class='''+Class+''' then CallCount else 0 end)'


from T


group by Class


set @s=@s+' from T group by CallDate order by CallDate desc '


exec(@s)

结果

CallDateCallCount1CallCount2CallCount3
2005-08-09 00:00:00.0000033
2005-08-08 00:00:00.000 40779
2005-08-07 00:00:00.0006021
删除测试环境
drop table T
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐