조인 문의 드립니다.단순 SQL(주간업무보고 계획대비 결과 조회) 0 2 1,445

by lgxj20 [Oracle 기초] [2019.05.20 18:24:13]


문의.png (56,252Bytes)

우선 분기별로 주간업무 보고를 평가하는 시스템이며

주간별로 계획/성과를 등록을 합니다.

테이블구성은 주간업무마스터,상세 두개 테이블로 되어있으며

문제는 조회시 문제가 되는부분 때문에 문의 드립니다.

우선 제가 SQL을 생각해봤는데 아래처럼 작성했고요

M_DATA라고 우선 2019년 분기별,월별,주차를 구분하고 그게에 대하여 JOIN으로 계획,성과를 표현하려고 했는데요

문제는 제가 원하는 결과로 값이 조회가 안됩니다.

 

문제 SQL)

WITH M_DATA /* EvEp280.selectList */AS (SELECT *
          FROM(SELECT TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMMDD') AS YYYYMMDD ,
                       TO_CHAR(TRUNC(TO_DATE(TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMMDD')), 'IW'), 'YYYYMMDD') AS 주차시작일 ,
                       TO_CHAR(TO_DATE(TO_CHAR(TRUNC(TO_DATE(TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMMDD')), 'IW'), 'YYYYMMDD')) + 4, 'YYYYMMDD') AS 주차종료일 ,
                       TO_CHAR(TO_DATE(TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMMDD')), 'W') AS 주차 ,
                       RPAD(TO_CHAR(TO_DATE(TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMMDD')), 'Q'), 3) AS 분기 ,
                       TO_CHAR(TO_DATE(DAYS) + (LV - 1), 'YYYYMM') AS YYYYMM
                  FROM (SELECT '2019' || '0101' AS DAYS
                          FROM DUAL ) INNER JOIN (SELECT LEVEL lv
                          FROM dual CONNECT BY LEVEL <= 365 ) S ON 1=1
                 WHERE 1=1 )
         WHERE 1=1
           AND YYYYMMDD = FIRST_DAY )
SELECT YYYYMMDD
      ,주차시작일
      ,주차종료일
      ,주차
      ,분기
      ,YYYYMM
      ,S.주차시작일
      ,S.주차종료일
      ,S.사번
      ,S1.구분
      ,S1.순번
      ,S1.내역
      ,S2.구분
      ,S2.순번
      ,S2.내역
  FROM
  (
        SELECT *
        FROM M_DATA
        WHERE 1=1
          AND QUART = 2
    ) M
    LEFT OUTER JOIN 주간업무 마스터 테이블 S
    ON M.주차시작일 = S.주차시작일
    AND M.주차종료일 = S.주차종료일
    LEFT OUTER JOIN THV_OUTCOME_WEEK_REP_D S1
    ON M.주차시작일 = S1.주차시작일
    AND M.주차종료일 = S1.주차종료일
    AND S.사번 = S1.사번
    AND S1.구분 = '1'
    LEFT OUTER JOIN 주간업무 상세 테이블 S2
    ON M.주차시작일 = S2.주차시작일
    AND M.주차종료일 = S2.주차종료일
    AND S.사번 = S2.사번
    AND S2.구분 = '2'
ORDER BY M.YYYYMMDD,S1.순번,S2.순번

원하는 결과 값가 테이블 데이타는 파일로 첨부합니다.

by 마농 [2019.05.20 19:42:00]
SELECT m.주차시작일
     , m.주차종료일
     , m.주차
     , m.분기
     , m.yyyymm
     , s.사번
     , s1.순번
     , MIN(DECODE(s1.구분, '1', s1.내역)) 계획_내역
     , MIN(DECODE(s1.구분, '2', s1.내역)) 실적_내역
  FROM m_data m
  LEFT OUTER JOIN 주간업무마스터테이블 s
    ON m.주차시작일 = s.주차시작일
   AND m.주차종료일 = s.주차종료일
  LEFT OUTER JOIN 주간업무상세테이블 s1
    ON s.주차시작일 = s1.주차시작일
   AND s.주차종료일 = s1.주차종료일
   AND s.사번       = s1.사번
   AND s1.구분 IN ('1','2')
 WHERE m.분기 = 2
 GROUP BY m.주차시작일
     , m.주차종료일
     , m.주차
     , m.분기
     , m.yyyymm
     , s.사번
     , s1.순번
 ORDER BY 주차시작일, 사번, 순번
;

 


by lgxj20 [2019.05.21 09:15:06]

감사합니다.

이렇게 하면 되겠군요..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입