关于数据库建立视图的问题(一道遇到的面试题)

来源:百度知道 编辑:UC知道 时间:2024/06/22 22:41:47
现在有两张表:
Departmente表中嵌入记录
部门号 部门名称
A001 人力资源部
A002 财务部

Employee表中嵌入记录
员工号 姓名 部门号 成绩
001 张三 A001 90
002 李四 A001 90
003 王五 A001 80
004 张飞 A002 70
005 刘备 A002 60
006 关羽 A002 50
现请问:
写视图VdepEm2,求各部门的前2名,显示员工号、成绩以A001部门为例,张三和李四分数最高且相同都是第一名,王五第二名,符合结果的有张三、李四、王五。
不好意思,一楼给出的答案貌似和题意还有一点距离啊!不过还是谢谢了!!

--建立临时视图1,检索每个部门第一名分数
create or replace view temp_v1 as
select 部门号,max(成绩) as 成绩 from Employee group by 部门号;
--在临时视图1的基础上建立临时视图2,检索第二名分数
create or replace view temp_v2 as
select 部门号,max(成绩) as 成绩 from Employee
where (部门号,成绩) not in (select * from temp_v1)
group by 部门号;
--联合两个临时视图的查询结果,建立临时视图3
create or replace view temp_v3 as
select * from
(select * from temp_v1 union select * from temp_v2)
order by 部门号,成绩;
--建立目标视图
create or replace view VdepEm2 as
select 部门号,员工号,成绩 from Employee
where(部门号,成绩) in (select * from temp_v3);

*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。