CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教一个联合查询统计问题?

楼主lang8848(程序狂)2004-07-02 23:28:59 在 MS-SQL Server / 基础类 提问

我有一张表,结构如下:  
   
  A           B             C             D         F  
  ---------------------------  
  a1         b2           d             20       25  
  a1         b2           d             20       5  
  a1         b3           d             20       24  
  a2         b1           d             14       36  
   
  -------------------------------  
  得如下结构,对字段D   F   进行汇总,按A   B    
   
  A           B               C               D             f  
  ---------------------------------  
  a1         b2             d               40           30  
  a1         b3             d                 20           24  
  小计                                       60           54  
  a2         b1             d                 14           36  
  小计                                       14           36  
  合计:                                     74           90  
   
  在线等,加30分 问题点数:30、回复次数:11Top

1 楼hudan(路弯弯其不好走兮,吾将上下而求索)回复于 2004-07-02 23:59:51 得分 0

select   a,b,c,sum(d),sum(f)  
  from   yourTable  
  GROUP   BY   a,b,c  
  WITH   ROLLUP  
  Top

2 楼hudan(路弯弯其不好走兮,吾将上下而求索)回复于 2004-07-03 00:01:54 得分 0

不是用WITH   ROLLUP   就是用WITH   CUBE,记不清了,自己试一下  
  Top

3 楼lang8848(程序狂)回复于 2004-07-03 16:07:28 得分 0

上面的语句我运行后不符合我的要求,使用后,它将字段A   B   C   都有小计,我只是想对字段A有小计,最后有合计就可以了。  
   
   
  急等回复。Top

4 楼xiangsu(不孝子,奮發圖強!)回复于 2004-07-04 08:39:25 得分 0

 
  create   table   #temp(A   varchar(10),B   varchar(10),C   varchar(10),D   int,F   int)  
   
  insert   into   #temp  
  select   'a1','b2','d','20','25'  
  union   select     'a1','b2','d','20','5'  
  union   select   'a1','b3','d','20','24'  
  union   select   'a2','b1','d','14','36'  
     
  declare           @A   varchar(10),  
  @A_pre   varchar(10)  
  set   @A=''  
  set   @A_pre=''  
  declare   cur_1   cursor   for     select   A   from   #temp   order   by   A  
  open   cur_1  
  fetch   cur_1   into   @A  
  while   @@fetch_status=0  
  begin  
  if   @A=''   or   @A=@A_pre  
  set   @A_pre=@A  
  else  
  begin  
  insert   into   #temp  
  select     A,'X','X',sum(D),sum(F)     from   #temp  
  where   A=@A_pre   group   by   A  
  set   @A_pre=@A  
  end  
  fetch   cur_1   into   @A  
  end    
  insert   into   #temp  
  select     A,'X','X',sum(D),sum(F)     from   #temp  
  where   A=@A_pre   group   by   A  
  insert   into   #temp  
  select     'X','X','X',sum(D),sum(F)     from   #temp  
  where   B<>'X'   and   C<>'X'  
  deallocate   cur_1    
  select   *   into   #temp2     from   #temp   order   by   A,B,C  
  update   #temp2  
  set   A='小計',B='',C=''  
  where   A<>'X'   and   B='X'   and   C='X'  
  update   #temp2  
  set   A='合計',B='',C=''  
  where   A='X'  
  select   *   from   #temp2  
  drop   table   #temp,#temp2  
   
  /*  
   
  運行結果:  
   
  A                     B                     C                     D                       F                        
  ----------   ----------   ----------   -----------   -----------    
  a1                   b2                   d                     20                     5  
  a1                   b2                   d                     20                     25  
  a1                   b3                   d                     20                     24  
  小計                                                               60                     54  
  a2                   b1                   d                     14                     36  
  小計                                                               14                     36  
  合計                                                               74                     90  
   
  (影響   7   個資料列)  
   
  */Top

5 楼lang8848(程序狂)回复于 2004-07-05 09:51:50 得分 0

我用了一下的确可以,但如果A字段的值为汉字时,最后的结果是合数显示在了第一行,然后是小计,然后是明细记录。Top

6 楼xiangsu(不孝子,奮發圖強!)回复于 2004-07-05 10:05:08 得分 0

照上述,是漢字也行,最後結果不能再order   by   一次  
  否則會排序就會混亂...Top

7 楼lang8848(程序狂)回复于 2004-07-05 10:08:25 得分 0

能否具体一点吗?Top

8 楼zjcxc(邹建)回复于 2004-07-05 10:09:25 得分 30

--测试  
   
  --测试数据  
  create   table   tb(A   varchar(10),B   varchar(10),C   varchar(10),D   int,E   int)  
  insert   tb   select   'a1','b2','d',20,25  
  union   all   select   'a1','b2','d',20,5  
  union   all   select   'a1','b3','d',20,24  
  union   all   select   'a2','b1','d',14,36  
  go  
   
  --查询  
  select   A=case   grouping(A)   when   1   then   '合计'  
  else   case   grouping(B)   when   1     then   '小计'  
  else   A   end   end  
  ,B=case   grouping(B)   when   1   then   ''   else   B   end  
  ,C=case   grouping(B)   when   1   then   ''   else   max(C)   end  
  ,D=sum(D),E=sum(E)  
  from   tb  
  group   by   A,B   with   rollup  
  go  
   
  --删除测试  
  drop   table   tb  
   
  /*--测试结果  
   
  A                     B                     C                     D                       E                        
  ----------   ----------   ----------   -----------   -----------    
  a1                   b2                   d                     40                     30  
  a1                   b3                   d                     20                     24  
  小计                                                               60                     54  
  a2                   b1                   d                     14                     36  
  小计                                                               14                     36  
  合计                                                               74                     90  
   
  (所影响的行数为   6   行)  
  --*/  
  Top

9 楼huwgao(小楼听雨)回复于 2004-07-05 10:24:42 得分 0

declare   @t   table   (a   varchar(10),b   varchar(10),c   varchar(10),d   int,e   int)  
  insert   into   @t  
  select   '测试1','速度','d',20,25   union   all  
  select   '测试1','阿速','d',20,25   union   all  
  select   '测试1','阿速','d',20,25   union   all  
  select   '测试2','全文','d',20,25   union   all  
  select   '测试2','全文','d',20,25  
  select   *   from   @t  
   
  select   isnull(a,'合计')   as   a,isnull(b,'小计')   as   b,  
  min(c)   as   c,sum(d)   as   d,sum(e)   as   e  
  from   @t    
  group   by   a,b   with   rollup  
   
  ----返回结果  
   
  (所影响的行数为   5   行)  
   
  a                     b                     c                     d                       e                        
  ----------   ----------   ----------   -----------   -----------    
  测试1                 速度                   d                     20                     25  
  测试1                 阿速                   d                     20                     25  
  测试1                 阿速                   d                     20                     25  
  测试2                 全文                   d                     20                     25  
  测试2                 全文                   d                     20                     25  
   
  (所影响的行数为   5   行)  
   
  a                     b                     c                     d                       e                        
  ----------   ----------   ----------   -----------   -----------    
  测试1                 阿速                   d                     40                     50  
  测试1                 速度                   d                     20                     25  
  测试1                 小计                   d                     60                     75  
  测试2                 全文                   d                     40                     50  
  测试2                 小计                   d                     40                     50  
  合计                   小计                   d                     100                   125  
   
  (所影响的行数为   6   行)  
   
  Top

10 楼lang8848(程序狂)回复于 2004-07-05 10:50:10 得分 0

zjcxc(邹建),你的很正确,给你加分,能不能留下MSN   或QQ   我们以后联系Top

11 楼xiangsu(不孝子,奮發圖強!)回复于 2004-07-05 13:47:04 得分 0

555   ~~~       我寫了這麼長,竟然沒分   !!Top

相关问题

  • 查询统计
  • 2个表的联合查询和统计
  • 联合查询里,如何得到用sum函数统计的数值?见内
  • 查询统计求和
  • 查询和统计问题
  • 关于统计的查询
  • 查询统计问题?
  • 求最简统计查询!
  • 高手请进:先分类统计,再联合查询?怎么实现????有点烦呀!!!!
  • 请教查询统计的SQL语句???

关键词

  • 字段
  • 测试
  • 小计
  • tempselect
  • tempwhere
  • when1then
  • sum
  • varchar
  • union
  • 合计

得分解答快速导航

  • 帖主:lang8848
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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