WHERE절 조건에 CASE문 0 2 2,458

by 마법소녀 [SQL Query] Where case then [2022.11.18 16:25:41]


조회해야하는 컬럼 TEST에

A, B, C, D, E라는 코드값이 있습니다.

 

들어오는 파라미터값에 따라 출력되는 결과물이 달라집니다.

 

SELECT TEST FROM TABLE

WHERE TEST = NVL( ?, TEST)

 

A입력시 결과물에 A가 출력되게

B입력시 결과물에 A를 제외한 나머지를 출력되게

공백 입력시 해당 컬럼 값 전체 출력되게...

 

아무리 짱구를 굴려도 모르겠습니다... WHERE CASE문 폭풍검색했는데 답이 안 나오네요. 잘못 접근한 걸 가요?

by 우주민 [2022.11.18 17:02:59]

WITH TABLE_1 AS (
  SELECT 'A' AS TEST, 1 AS DATA UNION ALL
  SELECT 'B' AS TEST, 2 AS DATA UNION ALL
  SELECT 'C' AS TEST, 3 AS DATA UNION ALL
  SELECT 'D' AS TEST, 4 AS DATA UNION ALL
  SELECT 'E' AS TEST, 5 AS DATA 
)
, INPUT AS (
  SELECT 'A' AS INPUT UNION ALL
  SELECT 'B' AS INPUT UNION ALL
  SELECT NULL AS INPUT 
)  
SELECT T2.INPUT, T1.*
FROM TABLE_1 T1, INPUT T2
WHERE (T2.INPUT = 'A' AND TEST = 'A' )
OR (T2.INPUT = 'B' AND TEST <> 'A' )
OR (T2.INPUT IS NULL)  
ORDER BY T2.INPUT, T1.TEST

-- 정리 버전
SELECT *
FROM TABLE_이름 
WHERE (:변수 = 'A' AND TEST = 'A') -- 변수가 'A' 이고(일때) TEST = 'A' 인 데이터
OR (:변수 = 'B' AND TEST <> 'A' ) -- 변수가 'B' 이고(일때) TEST <> 'A' 인 데이터
OR (:변수 IS NULL)  -- 변수가 NULL 일때 전체 데이터

 

WITH 문의 INPUT 테이블은 변수로 INPUT 넣는걸 구연한 것입니다.

아래 실 쿼리에서 T2 테이블(INPUT 테이블)을 제거하고 T2.INPUT 컬럼에 변수를 넣으면 동일하게 작동할듯 합니다.

OR 조건으로 각각 해당 조건값을 처리했습니다.


by 마법소녀 [2022.11.21 09:04:22]

감사합니다! 회사 오자마자 확인했고 잘 작동됩니다. 감솨함다 횽님!! ㅠㅠ

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