CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

SQL语句,分组列出,分组统计..(既列出分组的明细,每组后出现统计)

楼主elongstory(阿龙)2005-01-04 11:38:18 在 MS-SQL Server / 应用实例 提问

 
  我有点笨,就拿个例子说吧  
   
  如下表:  
  部门     员工     工资  
  A             李       1000  
  B             王       2000  
  A             张       3000  
  B             赵       4000  
   
  用一条SQL语名,想得到以下的结果:  
         
        部门     员工     工资  
          A             李       1000  
          A             张       3000  
  合计                                   4000  
          B             王       2000  
          B             赵       4000  
  合计                                   6000  
   
   
  能实现吗?  
   
  问题点数:100、回复次数:20Top

1 楼lsxaa(小李铅笔刀)回复于 2005-01-04 11:39:35 得分 0

GROUP   BY   部门   WITH   ROLLUP  
  Top

2 楼hdhai9451(☆新人类☆)回复于 2005-01-04 11:41:49 得分 10

select   部门,员工,工资=sum(工资)   from   tb   group   by   部门,员工   with   rollupTop

3 楼lsxaa(小李铅笔刀)回复于 2005-01-04 11:45:00 得分 10

select     部门,员工,   工资    
  from   (  
  select   1   as   order,部门   as   gg,部门,员工,工资     from   t  
  union   all  
  select   2   as   order,部门   as   gg,'合计'   as   部门,''   as   员工,a.工资  
  from   (select   部门,sum(工资)   as   工资   from   表   group   by   部门)   a   )   b  
  order   by   a.gg,a.orderTop

4 楼hdhai9451(☆新人类☆)回复于 2005-01-04 11:47:52 得分 40

create   table   tb(部門   varchar(10),員工   varchar(10),工資   numeric(10))  
  Insert   into   tb    
  select   'A','李','1000'  
  union   all   select   'B','王','2000'  
  union   all   select   'A','張','3000'  
  union   all   select   'B','趙','4000'  
   
  select   部門=case   when   員工   is   null   then   '合計'   else   部門   end,員工,工資  
  from   (select   部門,員工,工資=sum(工資)   from   tb   group   by   部門,員工   with   rollup)a  
  where   部門   is   not   null  
   
  --結果  
  部門         員工             工資  
  -------------------------------  
  A 李 1000  
  A 張 3000  
  合計 NULL 4000  
  B 王 2000  
  B 趙 4000  
  合計 NULL 6000Top

5 楼elongstory(阿龙)回复于 2005-01-04 13:13:07 得分 0

create   table   tb(部門   varchar(10),員工   varchar(10),工資   numeric(10))  
  Insert   into   tb    
  select   'A','李','1000'  
  union   all   select   'B','王','2000'  
  union   all   select   'A','張','3000'  
  union   all   select   'B','趙','4000'  
   
  select   部門=case   when   員工   is   null   then   '合計'   else   部門   end,員工,工資  
  from   (select   部門,員工,工資=sum(工資)   from   tb   group   by   部門,員工   with   rollup)a  
  where   部門   is   not   null  
   
  --結果  
  部門         員工             工資  
  -------------------------------  
  A 李 1000  
  A 張 3000  
  合計 NULL 4000  
  B 王 2000  
  B 趙 4000  
  合計 NULL 6000  
   
   
  为什么我得不出这样的结果:  
  提示:"WITHrollup"附近语法错误  
   
  怎么回事呢?Top

6 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-01-04 13:20:08 得分 0

with   rollup,两个单词之间有空格Top

7 楼elongstory(阿龙)回复于 2005-01-04 13:21:47 得分 0

帮我看看为什么会这个个错  
  “第1行:'WITHrollup'附近有语法错误”  
   
  create   table   tb(部門   varchar(10),員工   varchar(10),工資   numeric(10))  
  Insert   into   tb    
  select   'A','李','1000'  
  union   all   select   'B','王','2000'  
  union   all   select   'A','張','3000'  
  union   all   select   'B','趙','4000'  
   
  select   部門=case   when   員工   is   null   then   '合計'   else   部門   end,員工,工資  
  from   (select   部門,員工,工資=sum(工資)   from   tb   group   by   部門,員工   with   rollup)a  
  where   部門   is   not   nullTop

8 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-04 13:22:36 得分 30

你怎么Copy   别人的代码的??  
   
  你看看你的查询分析器,是不是把WITHrollup   连在一块了??  
  应该这样:   WITH   rollupTop

9 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-04 13:25:45 得分 0

我的可以,你的为什么不可以??  
   
   
  create   table   tbtest(部門   varchar(10),員工   varchar(10),工資   numeric(10))  
  Insert   into   tbtest    
  select   'A','李','1000'  
  union   all   select   'B','王','2000'  
  union   all   select   'A','張','3000'  
  union   all   select   'B','趙','4000'  
   
  select   部門=case   when   員工   is   null   then   '合計'   else   部門   end,coalesce(員工,'')   as   員工   ,工資  
  from   (select   部門,員工,工資=sum(工資)   from   tbtest   group   by   部門,員工   with   rollup)a  
  where   部門   is   not   null  
   
   
  部門                   員工                   工資                                                                                
  ----------   ----------   ----------------------------------------    
  A                     李                     1000  
  A                     張                     3000  
  合計                                         4000  
  B                     王                     2000  
  B                     趙                     4000  
  合計                                         6000  
   
  (所影响的行数为   6   行)  
  Top

10 楼elongstory(阿龙)回复于 2005-01-04 13:26:14 得分 0

我加空格了,录入上肯定没错的!  
   
  我单独运行  
  (select   部門,員工,工資=sum(工資)   from   tb   group   by   部門,員工   with   rollup)  
  完全正确,(所以录入没问题),加上它外面的大“嵌套”时就出现上面的提示Top

11 楼elongstory(阿龙)回复于 2005-01-04 13:30:37 得分 0

哪会热心的留个电话,  
  或给我打个05316200969  
  Top

12 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-04 13:31:55 得分 0

try:  
   
  您的SQL-Server   补定没打  
  打上SP3   试试看!  
   
  查看是否已经有补丁用:  
   
  print   @@version  
   
  如果输出是:  
  Microsoft   SQL   Server     2000   -   8.00.760   (Intel   X86)    
  Dec   17   2002   14:22:05    
  Copyright   (c)   1988-2003   Microsoft   Corporation  
  Personal   Edition   on   Windows   NT   5.0   (Build   2195:   Service   Pack   4)  
  已经打了补定.否则请打上补丁  
   
   
  您自己测试一下你的版本!  
  Top

13 楼chenxianping(做好程序員﹐向SA發展)回复于 2005-01-04 13:36:47 得分 0

樓主有我的方法一定沒得錯﹕  
  這是一個最為簡單有方便  
  select   部门,   员工,   工资   from   表名   order   by   部门compute   sum(工資)   as   小計   by   部门Top

14 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-04 13:40:22 得分 0

检查你的SQL有没有打补丁,没有的话要打上补丁,检查的方法是在查询分析器中运行:  
    select   @@version  
    如果出来的版本号是8.00.760以下,则表明你未安装sp3的补丁,要装上.  
   
  SQL补丁下载:  
  全部补丁的位置  
  http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766  
  应该安装的是  
  http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe  
   
  注意下载后,执行的时候是解压,要在解压后的目录中执行setup.bat才是真正的安装Top

15 楼elongstory(阿龙)回复于 2005-01-04 13:48:27 得分 0

查看是否已经有补丁用:  
   
  print   @@version  
   
  只显示已经执行,没有别的显示了!Top

16 楼elongstory(阿龙)回复于 2005-01-04 13:52:42 得分 0

是我是server   2000-8.00534(Intel   X86)Top

17 楼elongstory(阿龙)回复于 2005-01-04 14:05:29 得分 0

在关键字'AS'附近有语法错误!  
  怎么办,加不上个合计了!  
   
   
  樓主有我的方法一定沒得錯﹕  
  這是一個最為簡單有方便  
  select   部门,   员工,   工资   from   表名   order   by   部门compute   sum(工資)   as   小計   by   部门  
  Top

18 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-04 14:17:51 得分 0

打补定..  
   
  再查看:  
  select   @@version  
  Top

19 楼chenxianping(做好程序員﹐向SA發展)回复于 2005-01-04 17:03:01 得分 0

select   部门,   员工,   工资   from   表名   order   by   部门   compute     合計='合計'   sum(工資)   as   工資   by   部门,员工Top

20 楼ReViSion(和尚)回复于 2005-01-04 18:31:47 得分 10

用下面的SQL语句吧  
   
  Select   case   Grouping(工资)   when   1   then   '总计'    
                                                        else   ''   end   部门,  
                case   grouping(工资)   when   1   then   ''   else   Max(员工)   end   员工,sum(工资)   from   TableName  
  group   by   部门   with   rollup  
  order   by   部门Top

相关问题

  • 分组统计SQL?
  • Sql分组统计问题
  • 复杂的SQL分组统计
  • 求条分组统计的SQL
  • 分组统计
  • 请教一个分组统计的SQL怎么写??谢谢 ,急
  • 请教一个SQL的分组统计写法 ,谢谢,
  • 求救:sql server中怎么对统计数据进行分组
  • 这个sql 语句怎么写,分组统计
  • 求一个简单分组统计的sql语句

关键词

  • 员工
  • sql
  • 安装
  • 执行
  • 部门
  • 工资
  • 合計
  • 补丁
  • awhere
  • tb

得分解答快速导航

  • 帖主:elongstory
  • hdhai9451
  • lsxaa
  • hdhai9451
  • zlp321002
  • ReViSion

相关链接

  • SQL Server类图书

广告也精彩

反馈

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