앞의 쿼리 질문을 다시 수정해서 올립니다.. 0 1 255

by 여리당 [SQL Query] [2020.02.14 10:26:24]


마농님의 쿼리 정말 감사히 잘 봤습니다.

근데 제가 문의에 빠진부분이 있어서 다시한번 부탁드릴게요 ;;;

A테이블의 pk가 a,b인 경우라서 적용하니 좀 다른 결과가 나오더라구요;;

그래서 수정해서 다시 올립니다.

A테이블 a의날짜 컬럼이 있고 a,b,c,d,e 컬럼에 임의의 값이 있는 테이블이 있습니다.

a b c d e f
2/1 A 1 1 1 1
2/1 B 2 2 2 2
2/4 F 3 3 3 3
2/10 B 50 50 50 50
2/10 C 60 60 60 60

결과. 일자가 A테이블 일자보다 작거나 같은 일자의 값을 셋팅하는 결과가 나오도록 하는데 어렵네요;;

일자 a b c d e f
2/1 2/1 A 1 1 1 1
2/1 2/1 B 2 2 2 2
2/2 2/1 A 1 1 1 1
2/2 2/1 B 2 2 2 2
2/3 2/1 A 1 1 1 1
2/3 2/1 B 2 2 2 2
2/4 2/4 F 3 3 3 3
2/5 2/4 F 3 3 3 3
2/6 2/4 F 3 3 3 3
2/7 2/4 F 3 3 3 3
2/8 2/4 F 3 3 3 3
2/9 2/4 F 3 3 3 3
2/10 2/10 B 50 50 50 50
2/10 2/10 C 60 60 60 60
2/11 2/10 B 50 50 50 50
2/11 2/10 C 60 60 60 60
2/12 2/10 B 50 50 50 50
2/12 2/10 C 60 60 60 60
2/13 2/10 B 50 50 50 50
2/13 2/10 C 60 60 60 60
2/14 2/10 B 50 50 50 50
2/14 2/10 C 60 60 60 60

고수님들 도와주세요~~

by 마농 [2020.02.14 15:55:50]
WITH t AS
(
SELECT '20200201' a, 'A' b, 1 c, 1 d, 1 e, 1 f FROM dual
UNION ALL SELECT '20200201', 'B', 2, 2, 2, 2 FROM dual
UNION ALL SELECT '20200204', 'F', 3, 3, 3, 3 FROM dual
UNION ALL SELECT '20200210', 'B', 5, 5, 5, 5 FROM dual
UNION ALL SELECT '20200210', 'C', 6, 6, 6, 6 FROM dual
)
SELECT a.dt
     , b.*
  FROM (SELECT TO_CHAR(sdt + LEVEL - 1, 'yyyymmdd') dt
          FROM (SELECT TO_DATE(:sdt, 'yyyymmdd') sdt
                     , TO_DATE(:edt, 'yyyymmdd') edt
                  FROM dual
                )
         CONNECT BY LEVEL <= edt - sdt + 1
        ) a
  LEFT OUTER JOIN t b
    ON a.dt >= b.a
  LEFT OUTER JOIN t c
    ON c.a > b.a
   AND c.a < a.dt
 WHERE c.a IS NULL
;

 

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