经常用到的交叉表问题,一般用动态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

SQL里动态生成列

一般这种比较复杂一点都用一个存储过程来写比较好。因为单一的视图不能满足我们的需求。 类似这种,有规律可循的列。如果按照原始的方法 case、、、、when 、、、、then 、、、、、、en...
  • lijingrong_ljr
  • lijingrong_ljr
  • 2015-08-07 15:02:01
  • 1728

SQL动态日期列生成并统计

  • 2015年10月30日 16:12
  • 14KB
  • 下载

SQL动态生成交叉表应用范例

交叉表的应用较为丰富,应用的方式与范围也是十分丰富。
  • qiushuisen
  • qiushuisen
  • 2014-10-17 07:26:07
  • 1351

sqlserver一个动态交叉表的范例

社区问的人太多了,保存一个备用--建立测试环境set nocount oncreate table test(model varchar(20),date int ,qty int)insert in...
  • jinjazz
  • jinjazz
  • 2007-12-11 09:55:00
  • 2822

SqlServer生成交叉表大全

 SqlServer如何生成动态交叉表查询VB+MS SqlServer,是我们目前开发数据库应用系统最常用的模式,翻翻以前的老帖子,有一些SqlServer的问题经常被提出来,但正确解答甚少,现把我...
  • cngkqy
  • cngkqy
  • 2007-12-05 16:39:00
  • 12757

动态交叉表

/*-- 数据测试环境 --*/if exists (select * from dbo.sysobjects where id = object_id(N[tb]) and OBJECTPROPER...
  • lee576
  • lee576
  • 2006-12-04 22:24:00
  • 1104

WEBI交叉表与Dashboard解决方法

 WEBI交叉表与Dashboard解决方法   BI WS是一个很好的功能,甚至有些BI顾问将其称为革命性的。因为它允许我们将WEBI的某一个块儿作为web service发...
  • wwt19870912
  • wwt19870912
  • 2015-07-08 08:58:30
  • 1497

SQL动态交叉表

动态交叉表就是列表可以根据表中数据的情况动态创建列。    动态查询不能使用Select语句实现,它可以利用存储过程实现。思路是:     首先检索列头信息,形成一个游标,然后遍历游标,将上面静态交叉...
  • shaily
  • shaily
  • 2008-06-15 21:21:00
  • 1932

化解字符串超过8000个的方法及交叉表的使用

引用邹老大:经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题下面就讨论这个问题:/*-- 数据测试环境 --*/if exists (select * from dbo...
  • ReViSion
  • ReViSion
  • 2006-01-25 09:35:00
  • 782
收藏助手
不良信息举报
您举报文章:经常用到的交叉表问题,一般用动态SQL能生成动态列
举报原因:
原因补充:

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