2014-03-27 3 views
0

각 지점에서 가장 최근에 고용 된 직원의 정보가 포함 된보기를 만들려고했습니다. 하지만 나는 그것에 성공하지 못했습니다. 누구든지 나를 올바른 길로 인도 할 수 있습니까?보기를 만드는 방법

CREATE TABLE BRANCH(
    BRANCH_ID NUMBER(8) PRIMARY KEY, 
    BRANCH_NAME VARCHAR2(100) NOT NULL, 
    SCHEDULE_LINK_NUM NUMBER(8), 
    MAIN_BRANCH_ID number(8), 
    BRANCH_MGR_ID NUMBER(8), 
    BRANCH_OPEN_DATE DATE, 
    EMAIL VARCHAR2(50), 
    URL VARCHAR2(50) 
    ); 

    CREATE TABLE EMPLOYEE(
    EMPLOYEE_ID NUMBER(8) PRIMARY KEY, 
    FIRST_NAME VARCHAR2(50), 
    LAST_NAME VARCHAR2(50), 
    MIDDLE_NAME VARCHAR2(50), 
    GENDER CHAR(1), 
    SSN NUMBER(9) NOT NULL, 
    DOB DATE, 
    MARITAL_STATUS VARCHAR2(30), 
    SPOUSE_NAME VARCHAR2(50), 
    HOME_PHONE NUMBER(10), 
    CELL_PHONE NUMBER(10), 
    OFFICE_PH_EXTN NUMBER(6), 
    EMPLOYEE_TYPE VARCHAR2(40), 
    SALARY NUMBER(10,2), 
    TAX_DEDUCTION NUMBER(10,2), 
    BRANCH_ID NUMBER(8), 
    MGR_ID NUMBER(8), 
    CONSTRAINT EMP_BRANCH_FKEY FOREIGN KEY(BRANCH_ID) REFERENCES BRANCH(BRANCH_ID), 
    CONSTRAINT EMP_EMPTYPE_CHECK CHECK(EMPLOYEE_TYPE IN ('MANAGER', 'MECHANIC', 'SECRETARY', 'SALES PERSON')), 
    CONSTRAINT EMP_MARITSTATUS_CHECK CHECK(MARITAL_STATUS IN ('SINGLE', 'MARRIED', 'DIVORCED')) 
    ); 

    CREATE TABLE EMP_WORK_HISTORY(
    BRANCH_EMP_NUM NUMBER(8) PRIMARY KEY, 
    BRANCH_ID NUMBER(8), 
    EMPLOYEE_ID NUMBER(8), 
    JOIN_DATE DATE NOT NULL, 
    RELIEVING_DATE DATE, 
    EMPLOYEE_TYPE VARCHAR2(40), 
    DESCRIPTION VARCHAR2(200), 
    CONSTRAINT BRANCH_WRKHIS_BID_FKEY FOREIGN KEY(BRANCH_ID) REFERENCES BRANCH(BRANCH_ID), 
    CONSTRAINT BRANCH_WRKHIS_EID_FKEY FOREIGN KEY(EMPLOYEE_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID), 
    CONSTRAINT EMP_WRKHIS_EMPTYPE_CHECK CHECK(EMPLOYEE_TYPE IN ('MANAGER', 'MECHANIC', 'SECRETARY', 'SALES PERSON')) 
    ); 

내가보기 아래와 같이 작성했습니다 :

CREATE VIEW LAST_EMPLOYEE_BRANCH AS 
WITH LAST_EMP_BRANCH AS 
(SELECT MAX(EWH.JOIN_DATE) AS LAST_HIRED_DATE, EWH.BRANCH_ID 
FROM EMP_WORK_HISTORY EWH GROUP BY EWH.BRANCH_ID) 
SELECT E.FIRST_NAME || E.LAST_NAME AS EMPLOYEE_NAME, 
B.BRANCH_NAME, LEB.LAST_HIRED_DATE, E.SALARY, 
EXTRACT(YEAR FROM NUMTOYMINTERVAL(MONTHS_BETWEEN(TRUNC(SYSDATE),E.DOB),'MONTH')) AS AGE 
FROM EMPLOYEE E, BRANCH B, LAST_EMP_BRANCH LEB 
WHERE E.BRANCH_ID = B.BRANCH_ID 
AND LEB.BRANCH_ID = E.BRANCH_ID; 

위의보기를 실행하여 내가 모든 직원의 기록을 얻고있다. 누구든지이 일을 도울 수 있습니까?

+4

"모든 직원 기록 확보 중 _"- 예상되는 결과는 무엇입니까? – mustaccio

답변

0

조인에 EMP_WORK_HISTORY 테이블과 LAST_HIRED_DATE 열을 포함하는 것을 잊어 버린 것 같습니다. 아래 검색어를 사용해보십시오.

CREATE OR REPLACE VIEW LAST_EMPLOYEE_BRANCH AS 
WITH LAST_EMP_BRANCH AS 
(SELECT MAX(EWH.JOIN_DATE) AS LAST_HIRED_DATE, EWH.BRANCH_ID 
FROM EMP_WORK_HISTORY EWH GROUP BY EWH.BRANCH_ID) 
SELECT E.FIRST_NAME || E.LAST_NAME AS EMPLOYEE_NAME, 
B.BRANCH_NAME, LEB.LAST_HIRED_DATE, E.SALARY, 
EXTRACT(YEAR FROM NUMTOYMINTERVAL(MONTHS_BETWEEN(TRUNC(SYSDATE),E.DOB),'MONTH')) AS AGE 
FROM EMPLOYEE E, BRANCH B, LAST_EMP_BRANCH LEB, EMP_WORK_HISTORY EWH 
WHERE E.BRANCH_ID = B.BRANCH_ID 
AND LEB.BRANCH_ID = E.BRANCH_ID 
AND E.EMPLOYEE_ID = EWH.EMPLOYEE_ID 
AND B.BRANCH_ID = EWH.BRANCH_ID 
AND LEB.LAST_HIRED_DATE = EWH.JOIN_DATE; 
관련 문제