WHERE절은 CASE 안되나요? 1 4 2,376

by 붕냥붕 [SQL Query] [2013.11.07 13:43:44]


SELECT
COL_YN
,COL_VAL
FROM TBL

여기서 조건절을 줄건데요.

COL_YN이 'Y'이면 WHERE COL_VAL <= 100 을..
COL_YN이 'N'이면 WHERE COL_VAL = 100 을 조건절로 주고 싶습니다.

CASE 로는 안될것 같은데 PL/SQL 없이 방법이 없을까요?

by 마농 [2013.11.07 14:03:09]
-- 1. OR --
SELECT *
  FROM tbl
 WHERE (col_yn = 'Y' AND col_val <= 100)
    OR (col_yn = 'N' AND col_val  = 100)
;
-- 2. 굳이 CASE 를 사용하고자 한다면 다음과 같이 억지스럽게 --
SELECT *
  FROM tbl
 WHERE col_val <= 100
   AND col_val >= DECODE(col_yn, 'Y', 0, 'N', 100)
;

by 붕냥붕 [2013.11.07 14:17:36]

고맙습니다^^


by 우리집아찌 [2013.11.07 14:13:46]
 
-- 깔끔치 않네요 ㅡㅡ
WITH T AS (
SELECT 1 SEQ , 'Y' COL_YN , 100 COL_VAL FROM DUAL UNION ALL
SELECT 2 , 'N' , 200 FROM DUAL UNION ALL
SELECT 3 , 'Y' , 50  FROM DUAL UNION ALL
SELECT 4 , 'N' , 100 FROM DUAL 
)

SELECT T.SEQ , T.COL_YN , T.COL_VAL FROM T 
 WHERE SIGN(T.COL_VAL - DECODE(T.COl_YN , 'Y' , 101 , 'N' , 100 )) = DECODE(T.COl_YN , 'Y' , -1 , 'N' , 0 )

by 붕냥붕 [2013.11.07 14:17:58]
고맙습니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입