쿼리하나로 세시간째 헤매네요 ㅠㅠ... 0 8 1,422

by 네루네코 [SQL Query] [2010.03.23 17:22:51]


  SELECT  COUNT(ROWNUM)
  FROM    TGOT_CMNCD_LIST
  WHERE  ( (ST LIKE '%%') AND (LENGTH(NVL(:gth_st,'')) < 1) )
  OR (ST = :gth_st AND LENGTH(:gth_st) >= 1)

;

대충 이런식으로 나타내는 쿼리인데...
gth_st 변수에 값이 들어가지 않을경우에는 전체 조회값을 가져오고,
gth_st 변수에 값이 들어갈 경우 그 값을 ST 컬럼에 비교하려구 합니다.

그런데 자꾸 WHERE문에서 값이 들어오지 않을경우 전체조회하려는 부분이
생각대로 잘 되지가 않네요...

선배님들 부탁드립니다 ㅠ_ㅠ
by 마농 [2010.03.23 17:32:55]
WHERE st = :gth_st OR :gth_st IS NULL

by v상이v [2010.03.23 17:35:49]
WHERE ST = CASE WHEN :gth_st IS NULL THEN ST
ELSE :gth_st
END

마농님이 간단하게 정리해 주시긴했는데...
이건 참고하시라고...^^;;
WHERE 절에 CASE WHEN 문을 쓸수 있어요...
나중에라도 도움이 되실까 적어봤습니다...

by v상이v [2010.03.23 17:37:45]
WHERE ST = DECODE(:gth_st,NULL,ST,:gth_st)

이렇게 하셔도 대구요~~

by neruneco [2010.03.23 17:38:56]
아 감사합니다 ㅠ_ㅠ... 겨우 통과했네요 ㅠ_ㅠ
정말 감사드려요 선배님들(_ _)

by 헌쓰 [2010.03.23 17:58:08]
이 방범도 한번 생각 해 보세요..퇴근 전에 오라클 클럽 놀려 온 1인 입니다.

SELECT COUNT(ROWNUM)
FROM TGOT_CMNCD_LIST
WHERE (ST = :gth_st AND LENGTH(:gth_st) >= 1)

UNION ALL

SELECT COUNT(ROWNUM)
FROM TGOT_CMNCD_LIST
WHERE
( (ST LIKE '%%') AND (LENGTH(NVL(:gth_st,'')) < 1) )

by 마농 [2010.03.23 18:01:39]
LENGTH(NVL(:gth_st,'')) < 1 구문의 문제점
''은 널로 인식됩니다. 따라서 NVL(:gth_st,'') 이는 널일경우 널로 바꾼다는 아무런 의미없는 구문입니다.
LENGTH(null)의 결과는 0 이 아니라 null 입니다.

by neruneco [2010.03.23 18:21:05]
아 감사합니다 ㅠ_ㅠ... 겨우 통과했네요 ㅠ_ㅠ
정말 감사드려요 선배님들(_ _)

by 헌쓰 [2010.03.23 18:44:23]
마농형 많이 배우고 갑니다. 4월 첫째주 토요일날 뵙겠습니다.
전 내일 월차 입니다. 브라보..

SELECT COUNT(ROWNUM)
FROM TGOT_CMNCD_LIST
WHERE (ST = :gth_st AND LENGTH(:gth_st||' ') > 1)

UNION ALL

SELECT COUNT(ROWNUM)
FROM TGOT_CMNCD_LIST
WHERE
( (ST LIKE '%%') AND (LENGTH(NVL(:gth_st,' ')) = 1) )
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입