100分求一句SQL

slimpotato 2005-01-15 10:09:42
SQL练习
要求:可以在SQLServer2000中测试,用一条SQL语句,得到要求的结果。
提示:可以使用COALESCE函数。
SQL语句,分组列出,分组统计

如下表:

部门 员工 工资
A 李 1000
B 王 2000
A 张 3000
B 赵 4000

用一条SQL语句,想得到以下的结果:

部门 员工 工资
A 李 1000
A 张 3000
合计 4000
B 王 2000
B 赵 4000
合计 6000


...全文
205 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
babyLovely 2005-01-18
  • 打赏
  • 举报
回复
s
xiaoyuehen 2005-01-16
  • 打赏
  • 举报
回复
用存储过程实现, 用动态SQL语句~~~~~~~
zanyzyg 2005-01-16
  • 打赏
  • 举报
回复

楼上说得对,可以用with rollup

NinGoo 2005-01-16
  • 打赏
  • 举报
回复
你这里要根据两列做group by,用一句出你的效果我做不到,COALESCE只是一个null值得替换函数,不是聚合函数,它只是可以将with rollup或者with cube的null值替换成‘合计’而已,但是用一句group by 部门 ,员工 with rollup出来的效果跟你要求的会不一样
slimpotato 2005-01-16
  • 打赏
  • 举报
回复
这是2句SQL了,可以一句实现吗?使用COALESCE函数。
NinGoo 2005-01-16
  • 打赏
  • 举报
回复
select 部门 ,员工,sum(工资) as 员工工资 from test group by 部门 ,员工
union all
select 部门=部门+'合计',' ',sum(工资) from test group by 部门
order by 部门

-结果
部门 员工 员工工资
---- ---------- -----------
A 张 3000
A 李 1000
A合计 4000
B 赵 4000
B 王 2000
B合计 6000

(6 row(s) affected)
slimpotato 2005-01-16
  • 打赏
  • 举报
回复
up
wozhuchuanwei 2005-01-16
  • 打赏
  • 举报
回复
同上
用with rollup
631799 2005-01-16
  • 打赏
  • 举报
回复
select 部门=case when 员工 is null then '合计'else 部门end
,员工=COALESCE(员工,'')
,工资=sum(工资)
from tb group by [部门],员工 with rollup
xluzhong 2005-01-16
  • 打赏
  • 举报
回复
create table test0515(id char(10),nameid char(10),tmoney int)
insert into test0515 select 'a','a',1000
union all select 'b','a',2000
union all select 'a','b',2000
union all select 'b','b',1000
union all select 'c','a',1000


select id=case
when nameid is null then ''
else id
end
,isnull(nameid,'合计')
,sum(tmoney)
from test0515
group by [id],nameid
with rollup

drop table test0515
passionke 2005-01-16
  • 打赏
  • 举报
回复
up
tjficcbw 2005-01-15
  • 打赏
  • 举报
回复
一个SQL做这个工作,我不会,你看这样行不行
set rs0=DEPT表
 for i=1 to rs0数
  set rs=emp表..sql=select ename,sum(salary) as sal from emp where dno='rs0("dno)' group by ename 
..... 
 set rs=emp表..sql=select sum(salary) as sal from emp where dno='rs0("dno)'
.....
next
tjficcbw 2005-01-15
  • 打赏
  • 举报
回复
SELECT 部门,员工,SUM(工资) FROM db GROUP BY 部门,员工
slimpotato 2005-01-15
  • 打赏
  • 举报
回复
我知道这样可以大概实现功能:
但是,“合计”的那一行怎么出来呢???
提示是说要使用COALESCE函数。。。
真不知道怎么用。。。

COALESCE(表达式1,表达式2。。。表达式N)

好象是当取N个表达式中非零的那个,或是第一个!

不知道在这里怎么用????

select DEPT.DNAME AS '部门',EMP.ENAME AS '员工',SUM(EMP.SALARY) AS '工资'
FROM EMP,DEPT
WHERE DEPT.DNO=EMP.DNO
GROUP BY DEPT.DNAME,EMP.ENAME
WITH ROLLUP

tjficcbw 2005-01-15
  • 打赏
  • 举报
回复
SELECT 部门,员工,工资 FROM db GROUP 部门,员工

你试一试这个
slimpotato 2005-01-15
  • 打赏
  • 举报
回复
up

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧