조건문 결과에 따른 별칭에 관해 질문드립니다. 0 2 610

by 디벨로프 [2016.07.26 11:34:48]


안녕하세요 회원님들, 오라클 초보입니다^^;

 

일을 하다가 쿼리를 짜게 되었는데 궁금한 점이 있어 질문을 드립니다. 곰곰히 생각해봐도 잘 모르겠네요. 

우선 쿼리는 다음과 같습니다.

 

 (SELECT COUNT (*) COUNT
          FROM offerings_mst a
         WHERE agency_cd = '88888'
           AND status_gbn IN ('R', 'Y')
           AND display_reg_date >=
                  (CASE
                      WHEN a.offerings_gbn IN ('AT', 'BU', 'JU', 'JB', 'OP', 'OB', 'RB', 'SH', 'CH', 'OR', 'OT')
                         THEN SYSDATE - 60
                      WHEN a.offerings_gbn IN ('RD', 'RH', 'ST', 'SR', 'OF', 'BD', 'LI', 'FA', 'AF', 'WH', 'CO', 'SB', 'EX', 'ET')
                         THEN SYSDATE - 180
                   END))

 

오라클 쿼리이며 서브 쿼리로 들어갈 부분입니다.

 

설명을 간략히 드리자면 agency_cd = (회원pk), status_gbn = (구분자), display_reg_date (회원당 언제부터 ~ 언제까지 기간의 내용들만 보여줄 것인지) 를 정해 놓은 것인데,

 

여기서 제가 해야 될 것은, 바로 저기 조건식의 값이 존재하면 (즉, 카운트가 0이 아니면)

"is_exist_maemul" 이라는 이름(별칭)으로 "Y"를 뽑아주고, 반대로 존재하지 않으면( 카운트가 0 이면) 똑같은 별칭으로

"N"을 뽑아 주는 것입니다.

 

곰곰히 생각해보고 이것저것 해봐도 어떻게 해야할지 감이 안잡히네요.

회원님들의 통쾌한 답변과 설명 부탁드립니다!

 

감사합니다.

 

by 마농 [2016.07.26 13:10:55]

조건절에 CASE 사용 하셨듯이.. Select 절에서도 Case 사용하시면 됩니다.
  SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END AS is_exist_maemul
  SELECT DECODE(COUNT(*), 0, 'N', 'Y') AS is_exist_maemul


단, 모두 다 카운트 한 뒤에 체크하는 것은 비효율입니다.
1건이 존재하건 100만건이 존재하건 결과는 똑같이 Y 입니다.
1건의 존재만 확인되면 나머진 읽을 필요 없이 'Y' 를 리턴하고 끝내는게 효율적이죠.
조건절에 ROWNUM 조건을 추가하어 1건만 읽고 끝내도록 하세요.
  AND ROWNUM <= 1


by 디벨로프 [2016.08.22 13:31:39]

감사합니다 덕분에 잘 해결하였습니다^^

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