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

转载 2011年01月12日 11:03:00

--原贴

http://community.csdn.net/Expert/topic/4200/4200386.xml?temp=.4856989

原始表如下格式:
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

根据Class的值,按日期分别统计出CallCount1,CallCount2,CallCount3。
当该日期无记录时值为0
要求合并成如下格式:
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

 


本文来自CSDN博客http://blog.csdn.net/zlp321002/archive/2005/08/10/449802.aspx

“不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”问题

“不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”问题   2008-11-14 22:09:22|  分类: ADO.NET|字号 订阅 ...

动态sql创建表、列

  • 2016年03月14日 12:33
  • 1KB
  • 下载

通用动态SQL查询串的生成

  • 2008年06月16日 07:12
  • 176KB
  • 下载

MyBatis动态sql问题

MyBatis动态sql问题 博客分类:  spring+hibernate+ibatis框架 ibatis  接使用JDBC一个非常普遍的问题就是动态SQL。使用参数值、参数...

使用动态SQL实现行列转换和按列递减的功能

       /*    基本需求:    库房里会记录每个物料每周的使用数量。    报表要求显示物料的初始数量,及每周使用后的剩余数量。    本例子使用两个功能,    ...
  • ykj_fj
  • ykj_fj
  • 2014年04月01日 09:07
  • 1184

静态SQL和动态SQL之where in list问题(读书笔记之一)

--建两个表xy和yz作为测试用,所以表很简单,不需要数据 DROP TABLE xy; CREATE TABLE xy(ID NUMBER); DROP TABLE yz; CREATE T...

使用动态SQL实现按列递减的功能

代码如下:    declare @d_startdate datetime  --计算开始的时间    declare @i_week int -- 计算的周数    declare @i...
  • ykj_fj
  • ykj_fj
  • 2014年04月01日 08:02
  • 491

SQL Server 动态SQL EXEC加括号与不加括号的一点小问题

SQL Server 2008 R2关键代码 DECLARE @lv_address VARCHAR(2000), @lv_re_ids V...
  • kxjrzyk
  • kxjrzyk
  • 2015年03月17日 15:08
  • 446

hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynam...
  • sd_yi
  • sd_yi
  • 2013年11月28日 17:09
  • 464

利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynam...
  • ID_Rin
  • ID_Rin
  • 2017年04月24日 13:06
  • 408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经常用到的交叉表问题,一般用动态SQL能生成动态列
举报原因:
原因补充:

(最多只允许输入30个字)