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);

オラクルは「無効な識別子」を示しています。助けが必要!!

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 に答える