经常用到的交叉表问题 一般用动态SQL能生成动态列
2008-04-18 15:26
253 查看
原始表如下格式:
根据Class的值,按日期分别统计出CallCount1,CallCount2,CallCount3。当该日期无记录时值为0,
要求合并成如下格式:
创建测试环境:
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)
结果
删除测试环境
drop table T
Class | CallDate | CallCount |
1 | 2005-8-8 | 40 |
1 | 2005-8-7 | 6 |
2 | 2005-8-8 | 77 |
3 | 2005-8-9 | 33 |
3 | 2005-8-8 | 9 |
3 | 2005-8-7 | 21 |
要求合并成如下格式:
CallDate | CallCount1 | CallCount2 | CallCount3 |
2005-8-9 | 0 | 0 | 33 |
2005-8-8 | 40 | 77 | 9 |
2005-8-7 | 6 | 0 | 21 |
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)
结果
CallDate | CallCount1 | CallCount2 | CallCount3 |
2005-08-09 00:00:00.000 | 0 | 0 | 33 |
2005-08-08 00:00:00.000 | 40 | 77 | 9 |
2005-08-07 00:00:00.000 | 6 | 0 | 21 |
drop table T
相关文章推荐
- 经常用到的交叉表问题,一般用动态SQL能生成动态列!
- 经常用到的交叉表问题,一般用动态SQL能生成动态列!
- 经常用到的交叉表问题,一般用动态SQL能生成动态列
- 经常用到的交叉表问题,一般用动态SQL能生成动态列!
- 经常用到的交叉表问题,一般用动态SQL能生成动态列
- 经常用到的交叉表问题,一般用动态SQL能生成动态列
- 经常用到的交叉表问题,一般用动态SQL能生成动态列! 选择自 zlp321002 的 Blog
- 经常用到的交叉表问题,一般用动态SQL能生成动态列
- 关于mybatis插件tk.mybatis生成的动态sql语句字段不加``的问题
- 对于“不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- “对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成问题的解决办法
- 对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- “不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”问题
- ssm项目使用Mybatis动态拼接sql语句,生成的sql中文全部显示为???的问题(配置文件sql语句中文解析问题)
- Mybatis:关于动态生成sql语句的一些问题
- 解决动态生成的SQL中特殊字符的问题 QuotedStr function
- 交叉表,动态SQL生成动态列
- 对于“不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- 在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列)