특정한 경우를 만족하는 행을 SELECT하기 위해서 WHERE 절에서
1 2 3 4 5 6 7 8 9 10 | ( CASE WHEN @CD_COMPANY = '1000' AND CODE IN ('300', '310', '320') THEN 1 ELSE 0 END WHEN @CD_COMPANY = '2000' AND CODE IN ('300' ) THEN 1 ELSE 0 END ) = 1 ( CASE WHEN A.CD_COMPANY = '1000' AND A.CODE IN ('100', '200') THEN 1 ELSE 0 END ) = 0 | cs |
특정한 경우를 만족하는 값만 리턴받고 싶을때
예를 들어서
회사코드가 1000이고 CODE가 100과 200인 행은 SELECT에서 제외하고 싶을때,
회사코드가 1000이고 CODE가 300, 310, 320인 행과
회사코드가 2000이고 CODE가 300인 행만 리턴받고 싶을때
WHERE절에서 CASE WHEN절을 사용하여 해당 요구사항을 만족 시킬 수 있다.
물론 OR를 사용하여 해당문제를 해결할 수도 있지만, OR절을 사용하게 되면 INDEX가 있음에도 불구하고 FULL SCAN을 유도 하기 때문에 시간이 오래걸린다. 그래서 OR은 되도록 변수에만 사용하여야 한다.
그리고 TRUE는 1 FALSE는 0으로 정해서 가독성을 높이자.
'SQL > MS-SQL' 카테고리의 다른 글
UNION ALL로 소계, 합계 구하기 (0) | 2017.09.05 |
---|---|
CHOOSE, IIF 논리함수 (0) | 2017.09.05 |
FOR XML (0) | 2017.09.04 |
WINDOW FUNCTION (0) | 2017.09.04 |
Dynamic Query와 Pivot (0) | 2017.09.03 |