오라클 sql 질문 드려요~~ 0 2 1,507

by 망고탱고77 [SQL Query] select [2019.02.27 15:54:41]


 

    /* 1 */
    SELECT attend_dt,
           employee1 AS empno, sum(a), sum(b)
          
      FROM a_test
     WHERE attend_dt BETWEEN '20180604' AND '20180610' 
       AND employee1 = '0902270001'
      
       UNION ALL
      
    /* 2 */
       SELECT B.TEMP_DT, '', '', ''
         FROM DUAL A,
              (SELECT  TO_CHAR(to_date('20180604', 'yyyymmdd') + LEVEL - 1, 'yyyymmdd') AS temp_dt
          FROM  dual
       CONNECT BY level <= 7) B


 
a_test에 있는 특정일에 속한 사번의 attend_dt(근무일자)와 employee1(사번)을 가지고 오고 있는데요


2018년 6월을 조회조건으로 검색하면 화면에 보여주고자 하는 내용은 아래와 같습니다


주시작일자      주종료일자    사번      합계(1)  합계(2)
===========================================================
20180604      20180610     employee1     0        0
20180611      20180617     employee1     10       20
20180618      20180624     employee1     0        0
20180625      20180701     employee1     10       20


그런데 사번에 대한 (1) 에 대한 합계 정보가 없어도
주시작일자와 주종료일자는 고정으로 보여주어야 하는데...

제가 짠 위의 쿼리에서 진행이 되지 않고 있어요 ㅠㅠ


AND employee1 = '0902270001' --- 이 조건은 제가 테스를 위해 추가한거구요
1테이블에 나오는 사번에 대한 주차별 시작일자와 종료일자를 fix해서 보여줘야되는데

고수님들의 답변 부탁드립니다 ^^;;

 

by 마농 [2019.02.27 17:46:33]
WITH w_test AS
(
SELECT ym
     , w
     , TO_CHAR(sdt + w*7-7, 'yyyymmdd') sdt
     , TO_CHAR(sdt + w*7-1, 'yyyymmdd') edt
  FROM (SELECT ym
             , TRUNC(TO_DATE(ym||'04', 'yyyymmdd'), 'iw') sdt
          FROM (SELECT '201806' ym FROM dual)
        )
     , (SELECT LEVEL w FROM dual CONNECT BY LEVEL <= 5)
 WHERE TO_CHAR(sdt + w*7-4, 'yyyymm') = ym
)
, a_test AS
(
SELECT '0001' employee1, '20180613' attend_dt, 10 a, 20 b FROM dual
UNION ALL SELECT '0001', '20180629', 10, 20 FROM dual
UNION ALL SELECT '0002', '20180619', 11, 22 FROM dual
)
SELECT a.ym
     , a.w
     , a.sdt
     , a.edt
     , b.employee1
     , NVL(SUM(a), 0) a
     , NVL(SUM(b), 0) b
  FROM w_test a
  LEFT OUTER JOIN a_test b
  PARTITION BY (b.employee1)
    ON b.attend_dt BETWEEN a.sdt AND a.edt
 GROUP BY a.ym
     , a.w
     , a.sdt
     , a.edt
     , b.employee1
 ORDER BY b.employee1, a.w
;

 


by 망고탱고77 [2019.03.07 13:58:31]

답변 감사드립니다~ 너무 늦게 댓글 드려 죄송해요~참고 해서 적용해보도록 할게요 ^^

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