1.
SELECT A.DURATION, A.DT, B.DURATION_PRE, B.DT
FROM
(
SELECT TO_CHAR(TO_DATE('20081117','yyyymmdd') + ROWNUM - 1,'yyyymmdd') DURATION,
TO_CHAR(TO_DATE('20081117','yyyymmdd') + ROWNUM - 1,'dd') DT
FROM EVENT
WHERE ROWNUM <= TO_DATE('20081216','yyyymmdd')- TO_DATE('20081117','yyyymmdd') + 1
)A FULL OUTER JOIN
(
SELECT TO_CHAR(TO_DATE('20081017','yyyymmdd') + ROWNUM - 1,'yyyymmdd') DURATION_PRE,
TO_CHAR(TO_DATE('20081017','yyyymmdd') + ROWNUM - 1,'dd') DT
FROM EVENT
WHERE ROWNUM <= TO_DATE('20081116','yyyymmdd')- TO_DATE('20081017','yyyymmdd') + 1
)B
ON A.DT = B.DT
위 쿼리를 실행하면 FULL OUTER JOIN 이 제대로 실행되지 않고 LEFT OUTER JOIN 한 결과가 나옵니다.
FROM 절에 A, B 와 같이 INLINE VIEW 를 사용하면 FULL OUTER JOIN 이 안되는 건지 궁금합니다.
위 쿼리에서 A, B를 각각 THIS_MONTH, PRE_MONTH 인 VIEW 로 만든후 FULL OUTER JOIN 하면
결과가 제대로 나옵니다.
2.
SELECT *
FROM THIS_MONTH A FULL OUTER JOIN PRE_MONTH B
ON A.DT = B.DT
원하는 결과테이블은 아래와 같이 20081031일 데이타가 나와야 합니다.
A.DURATION A.DT B.DURATION, B.DT
------------------------------------------------------
20081117 17 20081017 17
20081118 18 20081018 18
. .
. .
20081130 30 20081030 30
20081031 31 <-- 31 일 데이타가 나와야 합니다.
20081201 01 20081101 01
. .
. .
20081216 16 20081116 16
1번 FULL OUTER JOIN 쿼리를 실행하면 결과가 아래의 LEFT OUTER JOIN 한 결과와 같이 나옵니다.
A.DURATION A.DT B.DURATION, B.DT
------------------------------------------------------
20081117 17 20081017 17
20081118 18 20081018 18
. .
. .
20081130 30 20081030 30
20081201 01 20081101 01
. .
. .
200812116 16 20081116 16
FULL OUTER JOIN 으로 31일 날짜를 뽑으려고 하는데
머가 문제인지 LEFT OUTER JOIN 한 결과데이타가 나옵니다.
문제가 먼지 알려주시면 감사하겠습니다.
아니면 다른 더 좋은 방법이 있으면 알려주시면 더욱 감사하겠습니다.
몇일동안 여기저기 찾아보고 있는데 알 수가 없습니다.
부탁드립니다.
그럼 날씨가 많이 추운데 건강하십시오~
|