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

求一个简单的sql,急!!

楼主win1122(我是谁)2005-04-01 20:32:05 在 MS-SQL Server / 基础类 提问

用一个sql语句写,合计T1各班的数学和语文的总分形成表t2  
  表T1  
   
      班级           姓名             数学                   语文  
  ---------------------------------------------  
      01               a1                 80                       70  
      02               a2                 70                       80  
      01               b1                 75                       30  
      03               b2                 90                       90  
      01               ca                 90                       50  
      02               cs                 80                       90  
   
  表T2  
      班级           姓名             数学                   语文  
  ---------------------------------------------  
      01               小计             245                     150  
      01               a1                 80                       70  
      01               b1                 75                       30  
      01               ca                 90                       50  
      02               小计             150                     170  
      02               a2                 70                       80  
      02               cs                 80                       90  
      03               小计             90                       90  
      03               b2                 90                       90  
                        合计             485                     410  
   
  问题点数:60、回复次数:8Top

1 楼zjcxc(邹建)回复于 2005-04-01 20:47:04 得分 50

--测试数据  
   
  create   table   T1(班级   varchar(10),姓名   varchar(10),数学   int,语文   int)  
  insert   T1   select   '01','a1',80,70  
  union   all   select   '02','a2',70,80  
  union   all   select   '01','b1',75,30  
  union   all   select   '03','b2',90,90  
  union   all   select   '01','ca',90,50  
  union   all   select   '02','cs',80,90  
  go  
   
  --查询  
  select   班级=case   when   grouping(班级)=1   then   ''   else   班级   end  
  ,姓名=case    
  when   grouping(班级)=1   then   '合计'  
  when   grouping(姓名)=1   then   '小计'  
  else   姓名   end  
  ,数学=sum(数学)  
  ,语文=sum(语文)  
  from   T1  
  group   by   班级,姓名   with   rollup  
  order   by   grouping(班级),班级,grouping(姓名)   desc  
  go  
   
  --删除测试  
  drop   table   T1  
   
  /*--结果  
   
  班级                   姓名                   数学                     语文                      
  ----------   ----------   -----------   -----------    
  01                   小计                   245                   150  
  01                   a1                   80                     70  
  01                   b1                   75                     30  
  01                   ca                   90                     50  
  02                   小计                   150                   170  
  02                   a2                   70                     80  
  02                   cs                   80                     90  
  03                   小计                   90                     90  
  03                   b2                   90                     90  
                        合计                   485                   410  
   
  (所影响的行数为   10   行)  
  --*/Top

2 楼frankwong(黄梓钿)回复于 2005-04-01 22:34:40 得分 0

收藏Top

3 楼chiwei(水手)回复于 2005-04-01 23:42:51 得分 0

markTop

4 楼nike_ljq(好好赚钱)回复于 2005-04-01 23:43:25 得分 0

upTop

5 楼boycq(池木)回复于 2005-04-01 23:53:58 得分 0

问一下哈  
  grouping(班级)=1   是什么意思Top

6 楼gzhughie(hughie)回复于 2005-04-02 00:34:47 得分 0

下面的语句可能会满足你的要求,只不过结果级会有点出入,结果是这样的:  
  班级                   姓名                   数学                     语文                      
  ----------   ----------   -----------   -----------    
  01                   a1                   80                     70  
  01                   b1                   75                     30  
  01                   ca                   90                     50  
  01                   小计                   245                   150  
  02                   a2                   70                     80  
  02                   cs                   80                     90  
  02                   小计                   150                   170  
  03                   b2                   90                     90  
  03                   小计                   90                     90  
                        合计                   485                   410  
   
  不知道你觉得这样是不是更合理?  
   
  语句是:  
  SELECT   CASE   WHEN   (GROUPING(班名)   =   1)   THEN   ''  
                          ELSE   ISNULL(班名,   'UNKNOWN')  
                END   AS   Item,  
                CASE   WHEN   (GROUPING(姓名)   =   1)   THEN   '小计'  
                          ELSE   ISNULL(姓名,   'UNKNOWN')  
                END   AS   Color,  
                SUM(数学)   AS   数学,  
                SUM(语文)   AS   语文    
  FROM   T1  
  GROUP   BY   班名,   姓名   WITH   ROLLUP  
  Top

7 楼gzhughie(hughie)回复于 2005-04-02 00:36:26 得分 5

呵呵,有点小问题  
   
  下面的语句可能会满足你的要求,只不过结果级会有点出入,结果是这样的:  
  班级                   姓名                   数学                     语文                      
  ----------   ----------   -----------   -----------    
  01                   a1                   80                     70  
  01                   b1                   75                     30  
  01                   ca                   90                     50  
  01                   小计                   245                   150  
  02                   a2                   70                     80  
  02                   cs                   80                     90  
  02                   小计                   150                   170  
  03                   b2                   90                     90  
  03                   小计                   90                     90  
                        合计                   485                   410  
   
  不知道你觉得这样是不是更合理?  
   
  语句是:  
  SELECT   CASE   WHEN   (GROUPING(班名)   =   1)   THEN   ''  
                          ELSE   ISNULL(班名,   'UNKNOWN')  
                END   AS   班名,  
                CASE   WHEN   (GROUPING(姓名)   =   1)   THEN   '小计'  
                          ELSE   ISNULL(姓名,   'UNKNOWN')  
                END   AS   姓名,  
                SUM(数学)   AS   数学,  
                SUM(语文)   AS   语文    
  FROM   T1  
  GROUP   BY   班名,   姓名   WITH   ROLLUPTop

8 楼ningmeng3000(柠檬)回复于 2005-04-02 10:01:25 得分 5

楼上的,你这个可能简一些,但也有错阿,也不符合楼主的要求.  
  还是一楼的好  
  不信你可以拿回去试一下.应该这样才对  
  SELECT   CASE   WHEN   (GROUPING(班级)   =   1)   THEN   ''  
                          ELSE   ISNULL(班级,   'UNKNOWN')  
                END   AS   班级,  
                CASE   WHEN   (GROUPING(姓名)   =   1)   THEN   '小计'  
                          ELSE   ISNULL(姓名,   'UNKNOWN')  
                END   AS   姓名,  
                SUM(数学)   AS   数学  
                ,SUM(语文)   AS   语文    
  FROM   T1  
  GROUP   BY   班级,   姓名   WITH   ROLLUP  
   
  Top

相关问题

  • SQL语句简单问~~~~~~~~~~~~!急,谢谢了!
  • 简单sql语句 着急解决
  • 求一简单sql着急要
  • 急!一个简单的sql语句??
  • 简单的SQL语句,急用
  • 简单的SQL?
  • 简单的SQL?
  • 求简单sql
  • 急! ! 急 ! ! 急! ! 急 ! !  一简单SQL语句查询!
  • 急急急!!简单的问题关于SQL datetime字段

关键词

  • 数学
  • 语句
  • ca
  • 小计
  • 班级
  • 语文
  • 姓名
  • unknown
  • group
  • 合计

得分解答快速导航

  • 帖主:win1122
  • zjcxc
  • gzhughie
  • ningmeng3000

相关链接

  • SQL Server类图书

广告也精彩

反馈

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