首先,表结构就有问题,不符合关系数据库的基本设计原则应该如此:create table Worker (
code         varchar(2) not null,
name         varchar(20) not null,
department   varchar(30) not null
);
begin
for i in 0..99 loop
insert into Worker values(i,'X'||i,TO_CHAR(ROUND(dbms_random.value(1,10)),''));
end loop;
commit;
end;
/create table Pay (
code         varchar(2) not null,
payday       date,
payment      number
);
begin
for i in 1..100 loop
insert /*+append*/ into pay
select code,sysdate - dbms_random.value(1,2000),TRUNC(dbms_random.value(1000,10000),-2)
from Worker;
commit;
end loop;
end;
/--基于两个表创建一个视图
create or replace view v_pay as
select a.code,a.name,a.department,b.payday,b.payment
from pay b,worker a
where b.code=a.code
/
1.取出2003年4月发薪水最多的部门。select department from
(
select department,sum(payment) as payment
from v_pay
where payday>=to_date('200304','yyyymm')
and payday<to_date('200305','yyyymm')
group by department
order by 2 desc
) where rownum<=1;
2.取出所有曾1个月发薪水1次以上的人员的编码,姓名,发薪日期,发薪次数,发薪总数这个题目有点问题,不知楼主期望什么样的结果,修改成如下要求:取出所有曾1个月发薪水1次以上的人员的编码,姓名,发薪月份,当月发薪次数,当月发薪总数select code,name,trunc(payday,'mm') as pay_month,count(*) as pay_times,sum(payment) as payment
from v_pay
group by code,name,trunc(payday,'mm')
having count(*)>6
/