중복제거...질문드립니다. 0 6 2,259

by 깨비 [2013.01.23 10:48:08]



SELECT B.RSV_USE_DT ,
   USE_TM ,
   CASE
   WHEN USE_TM BETWEEN ASGN_FROM_TM AND ASGN_TO_TM
   THEN 'X'
   ELSE 'O'
   END AS YN
  FROM
   (SELECT ASGN_DT,
  RSV_USE_DT ,
  TO_NUMBER(ASGN_FROM_TM) AS ASGN_FROM_TM ,
  TO_NUMBER(ASGN_TO_TM) AS ASGN_TO_TM
FROM APLY_INFM
    WHERE ACSS_FCIL_CD = '002'
  AND RSV_USE_DT = '20130202'
  AND ASGN_DT IS NOT NULL
   ) A,
   (SELECT '20130202' AS RSV_USE_DT,
  TM + LEVEL -1 AS USE_TM
FROM
  (SELECT TO_NUMBER(USE_FROM_TM) AS TM
    FROM INFM
   WHERE USE_YN = 'Y'
AND ACSS_FCIL_CD = '002'
  ) CONNECT BY LEVEL - 1 <= 13
   ) B
 WHERE B.RSV_USE_DT = A.RSV_USE_DT(+)
   AND B.RSV_USE_DT = '20130202'  
ORDER BY USE_TM


이렇게 하면 A의 레코드 갯수가 3개면
20130202 9 x
20130202 9 0
20130202 9 0
20130202 10 x
20130202 10 0
20130202 10 0
20130202 11 0
20130202 11 0
20130202 11 0


이런식으로 나옵니다.

저는
20130202 9 x
20130202 10 x
20130202 11 0

이렇게 나오게 하고 싶거든요.

잘 모르겠네요. 도와주세욤




by 아린 [2013.01.23 11:05:50]
GROUP BY 사용하시면 되겠네요. 


SELECT B.RSV_USE_DT, USE_TM ,
             MAX(CASE WHEN USE_TM BETWEEN ASGN_FROM_TM AND ASGN_TO_TM
                              THEN 'X' ELSE 'O' END) AS YN 
  FROM (SELECT ASGN_DT, RSV_USE_DT
                        , TO_NUMBER(ASGN_FROM_TM) AS ASGN_FROM_TM 
                        , TO_NUMBER(ASGN_TO_TM) AS ASGN_TO_TM 
               FROM APLY_INFM 
            WHERE ACSS_FCIL_CD = '002' 
                  AND RSV_USE_DT = '20130202' 
                  AND ASGN_DT IS NOT NULL 
                ) A, 
             (SELECT '20130202' AS RSV_USE_DT, TM + LEVEL -1 AS USE_TM 
                 FROM (SELECT TO_NUMBER(USE_FROM_TM) AS TM 
                               FROM INFM 
                            WHERE USE_YN = 'Y' 
                                  AND ACSS_FCIL_CD = '002' 
                             ) CONNECT BY LEVEL - 1 <= 13 
              ) B 
 WHERE B.RSV_USE_DT = A.RSV_USE_DT(+) 
      AND B.RSV_USE_DT = '20130202'
 GROUP BY B.RSV_USE_DT, USE_TM        
 ORDER BY USE_TM

by 부쉬맨 [2013.01.23 11:08:43]
저렇게있으니깐 잘모르겟네요.

A 테이블을 따로 돌려보고

B 테이블을 따로 돌려본다음에

데이터확인하면 될꺼같은데요 어차피 지금한게

B = A(+) B의 데이터가 3개밖에안나온거겠네요.

by 손님 [2013.01.23 11:46:09]

group by 도 시도해보았는데요..잘 안되서 질문 올렸슴죠..^^;;

by 마농 [2013.01.23 12:15:39]

단순 중복제거만을 목적으로 해서는 안될것 같네요.
전반적인 쿼리 구성이 잘못되어 있는것 같습니다.
원본자료와 원하는 결과자료를 비교해서 설명해 주시고
쿼리를 새로 작성하시는 것이 좋을 듯 합니다.


by 깨비 [2013.01.23 13:31:57]

마농님의 조언에 따라 다시 생각해보겠습니다.~

안되면 다시 남길께요~

감사합니다. ^^


by 손님 [2013.01.24 14:59:13]

파티션 바이 명령어로 over() nember(partition by 일자 order (xoo)컬럼 으로 잡고 select 로 다시 감싸서
where 에서 1 번만 잡으면 될거 같은데.

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