0

A) 每个抄表员在当月抄表的次数(这个视图应该可以随时使用,无需更改以适应日期)。

读数表

    Name            Null     Type         
--------------- -------- ------------ 
READINGID       NOT NULL VARCHAR2(4)  
READINGDATA              NUMBER(10)   
READINGDATE              DATE         
METERSERIALNO            VARCHAR2(10) 
EMPLOYEEID               VARCHAR2(10) 
LASTREADINGDATA          NUMBER(10)   

员工表

    Name                 Null     Type         
-------------------- -------- ------------ 
EMPLOYEEID           NOT NULL VARCHAR2(10) 
FIRSTNAME                     VARCHAR2(20) 
LASTNAME                      VARCHAR2(20) 
NUMBEROF_METERS_READ          NUMBER(10) 

我的答案

create or replace view ViewA as
  select E.EmployeeID as Employee, E.FirstName, E.Numberof_Meters_Read, R.ReadingDate
   from   Employee E
   join
   Readings   R
   on (R.EmployeeID = E.EmlpoyeeID);

Oracle 显示“标识符无效”。需要帮忙!!

4

2 回答 2

1

尝试将最后一行更改为:

 on (R.EmployeeID = E.EmployeeID)

(即E.EmployeeID,不是E.EmlpoyeeID

于 2012-11-23T11:29:58.697 回答
0

除了错字之外,您的意思是对员工有 NUMBEROF_METERS_READ 吗?因为那只能是总计,如果是这样,则不是每月总计(除非您有其他一些每月都会重置它的过程。

如果您只想通过查看读数来做到这一点..然后创建您的视图,如下所示:

select e.employeeid as employee, e.firstname, count(r.readingdate) numberof_meters_read
   from employee e left outer join readings r
                                on (r.employeeid = e.employeeid)
                               and r.readingdate >= trunc(sysdate, 'mm') 
                               and r.readingdate < add_months(trunc(sysdate, 'mm'), 1)
 group by e.employeeid, e.firstname;

或(如果您希望未完成任何工作的员工显示为“0”):

 select e.employeeid as employee, e.firstname, count(*) numberof_meters_read
   from employee e join readings r
                     on (r.employeeid = e.employeeid)
 where r.readingdate >= trunc(sysdate, 'mm')
   and r.readingdate < add_months(trunc(sysdate, 'mm'), 1)
 group by e.employeeid, e.firstname;
于 2012-11-23T11:41:00.567 回答