SQL语句,分组列出,分组统计..(既列出分组的明细,每组后出现统计)
我有点笨,就拿个例子说吧
如下表:
部门 员工 工资
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




