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 조건으로 각각 해당 조건값을 처리했습니다.