원래의 쿼리가 맞는지 의구심이 듭니다.
위 아래 동일 테이블(tsd72)이 사용되었지만 서로 조건이 다르네요.
보통 일관성 잇게 같은 조건을 사용하는 경우가 많은데요.
위, 아래 공통 조건
- g_bub_cd = :x
- sdfee_gbncd = '1'
- deliv_ins_day BETWEEN :x AND :x
위에만 있는 조건
- flag = '4'
위, 아래 공통으로 있는 듯 하지만 테이블이 다른 컬럼 조건으로 결국 다른 조건
- spsd_gbn = '1'
- spsd_gbn 컬럼이 위에서는 tsd72 의 컬럼, 아래에서는 tsd77 의 컬럼이네요
조건이 일관성이 있어야 할 것 같은데. 그렇지 않으니 의심이 가네요.
SELECT b.g_bub_cd , b.woo_no , REPLACE(b.deliv_ins_day, '.') deliv_ins_day FROM tsd77 a , tsd72 b WHERE a.g_bub_cd(+) = b.g_bub_cd AND a.woo_no (+) = b.woo_no AND a.spsd_gbn(+) = '1' AND b.sdfee_gbncd = '1' AND b.g_bub_cd = :v_g_bub_cd AND b.deliv_ins_day BETWEEN TO_CHAR( TO_DATE(:v_ym, 'yyyymm') , 'yyyy.mm.dd') AND TO_CHAR(LAST_DAY(TO_DATE(:v_ym, 'yyyymm')), 'yyyy.mm.dd') AND a.woo_no IS NULL GROUP BY b.g_bub_cd, b.woo_no, b.deliv_ins_day HAVING COUNT(CASE WHEN b.spsd_gbn = '1' AND b.flag = '4' THEN 1 END) > 0 ;