日期:2014-05-17  浏览次数:20780 次

新手,急求一条查询语句-----谢谢啊--学习中。。。请多帮忙。。。
表名:dept  
deptID 部门编码 Varchar(8) √ 
deptName 部门名称 Varchar(24) 
deptType 部门类别0:销售部门1:技术部门2:管理部门 char(1) 

表名:person
personID 工号 Varchar(8) √ 
Name 姓名 Varchar(24) 
deptID 部门编号 Varchar(8) 
Sex 性别0:女1:男 Char(1) 
Age 年龄 int 

表名:salary
Pk_salary 流水号 Varchar(8) √ 
Ddate 发工资日期 Varchar(24) 
personID 工号 Varchar(8) 
Amount 基本工资 Number(8,2) 
Bonus 奖金 Number(8,2) 

表名:overtime
Pk_overtime 流水号 Varchar(8) √ 
personID 工号 Varchar(8) 
Ddate 加班日期 Varchar(24) 
hTime 加班时间(小时) Int 
Note 备注 Varchar(100) 

二、写SQL语句完成要求 

7,按月汇总查询各部门最高工资人的工资,结果要求如下: 
月份 部门名称 部门最高工资人姓名 工资 





------解决方案--------------------
试试看~~~

select *
from (
select to_char(s.Ddate,'yyyymm') as salary_months,
d.deptName,
p.Name,
s.Amount+s.Bonus as salarys,
row_number() over(partition by to_char(s.Ddate,'yyyymm'),p.deptID order by (s.Amount+s.Bonus) desc) as rn
from salary s,
dept d,
person p
where s.personId = p.personId
and p.deptID = d.deptID
)ss
 where rn = 1;


------解决方案--------------------
select t.month 月份,t.deptname 部门,t.name 部门最高工资人姓名姓名,t.mount 工资 
from 

select to_char(c.ddate, 'yyyy-mm-dd) month, 
a.deptname,b.name,c.amount, 
row_number() over (partition by to_char(c.ddate, 'yyyy-mm-dd), a.deptname order by c.amount desc) rn 
from dept a,person b,salary c 
where a.deptid=b.dept_id 
and b.person=c.person) t 
where t.rn=1

用这个试试,或者就是
seletc t1. 月份,t1.部门,t1.部门最高工资人姓名姓名,t1.工资 
from 

select t.month 月份,t.deptname 部门,t.name 部门最高工资人姓名姓名,t.mount 工资, row_number() over (partition by t.month, t.deptname order by t.mount desc) rn
from
(
select to_char(c.ddate, 'yyyy-mm-dd) month,
a.deptname,b.name,c.amount 
from dept a,person b,salary c
where a.deptid=b.dept_id
and b.person=c.person) t ) t1 
where t1.rn=1