CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

动态列的统计

楼主cwq99(陈文)2005-04-04 09:51:15 在 MS-SQL Server / 应用实例 提问

有两个表,一个是表头定义   BT,如下  
  id   mc  
  1     语文  
  2     数学  
  3     英语  
  4     体育  
  5     电脑  
  这个表是可以再动态的回多N个MC的  
  另一个表记录实际数据  
  mydate                     btid     sj  
  2004-1-4                 1           78  
  2004-1-4                 2           85  
  2004-2-5                 1           78  
  .......                   3           74  
  .......                   4           77  
  .......                   1           55  
  ..........................  
  我要的结果是怎么查询得出这种样子  
  日期             语文                                       数学                               体育     ......(动态的,根据表bt的行数)  
  2004-1-4     (这一天的语文的和)     (这一天的数学的和)  
   
   
   
  问题点数:50、回复次数:3Top

1 楼jinjazz(近身剪)回复于 2005-04-04 09:59:01 得分 50

--建立测试环境  
  Create   Table   表1(id   varchar(10),mc   varchar(10))  
  --插入数据  
  insert   into   表1  
  select   '1','语文'   union  
  select   '2','数学'   union  
  select   '3','英语'   union  
  select   '4','体育'   union  
  select   '5','电脑'  
  --建立测试环境  
  Create   Table   表2(mydate   varchar(10),btid   varchar(10),sj   integer)  
  --插入数据  
  insert   into   表2  
  select   '2004-1-4','1','78'   union  
  select   '2004-1-4','2','85'   union  
  select   '2004-2-5','1','78'   union  
  select   '2004-2-5','3','74'   union  
  select   '2004-2-5','4','77'   union  
  select   '2004-2-5','1','55'  
  --测试语句  
  DECLARE   @SQL   VARCHAR(8000)  
   
  SET   @SQL='SELECT   mydate'  
  SELECT   @SQL=   @SQL+    
  ',sum(CASE   WHEN   btid   =   '''   +   id   +   '''   THEN   sj   else   0   END)   ['   +   mc   +   ']'  
  FROM   (SELECT   DISTINCT   id,mc   FROM   表1)   a  
  SET   @SQL=@SQL+'   FROM   表2   GROUP   BY   mydate'  
  exec   (@SQL)        
     
  --删除测试环境  
  Drop   Table   表2  
  Drop   Table   表1  
  /*  
  mydate           语文                     数学                     英语                     体育                     电脑                      
  ----------   -----------   -----------   -----------   -----------   -----------    
  2004-1-4       78                     85                     0                       0                       0  
  2004-2-5       133                   0                       74                     77                     0  
  */  
   
  Top

2 楼cwq99(陈文)回复于 2005-04-04 10:11:41 得分 0

谢谢!!!Top

3 楼winternet(冬天)回复于 2005-04-04 10:19:58 得分 0

declare   @s   nvarchar(4000)  
  select   @s=''  
  select   @s=@s+','+'sum(case   a.mc   when   '''+a.mc+'''   then   b.sj     else   0   end)['   +a.mc+']'  
                        from   表1   as   a    
  select   @s='select   b.mydate'+@s+'   from   表1   as   a   inner   join   表2   as   b   on   a.id=b.btid    
                                      group   by   b.mydate'  
   
  exec   (@s)  
   
  结果:  
  mydate           語文                     數學                     英語                     體育                     電腦                      
  ----------   -----------   -----------   -----------   -----------   -----------    
  2004-1-4       78                     85                     0                       0                       0  
  2004-2-5       133                   0                       74                     77                     0Top

相关问题

  • 请教一个分段+动态列统计的存储过程!!!
  • 分段+动态列统计的存储过程-完整描述
  • 如何动态统计DATAGRID里模版列(textbox)的数据?
  • 动态统计汇总
  • 再次请教一个分段+动态列统计的存储过程
  • ADO 数据集动态统计汇总
  • 如何动态统计datagrid某几个列的值?并显示在最后一行中
  • [求助]请教涉及到行列转换的动态区间分段统计实现方法
  • 如何在动态DataWindow中加入统计域?
  • 高手请问:对数据窗口动态汇总统计

关键词

  • 数学
  • 测试
  • 数据
  • unionselect
  • 语文
  • 动态
  • 表
  • mc
  • varchar
  • 体育

得分解答快速导航

  • 帖主:cwq99
  • jinjazz

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo