CLAUSE

2013-04-02 4 views
0

내가처럼 보이는 sproc에있는 WHERE if 문 : 나는 너무 많은 선택 문을 사용을 단축하지 싶습니다CLAUSE

-- @intUserType int (Passed in from sproc) 

IF @intUserType = 1 
BEGIN 
    SELECT * FROM Users 
    WHERE Users.isDeleted = 0 
END 

IF @intUserType = 4 
BEGIN 
    SELECT * FROM Users 
    WHERE Users.isDeleted = 0 
    AND Users.UserType <> 1 
END 

IF @intUserType = 3 
BEGIN 
    SELECT * FROM Users 
    WHERE Users.isDeleted = 0 
    AND Users.UserType IN (1,3,4) 
END 

은 좀 좋아 : 어떤을위한

SELECT * FROM Users 
WHERE Users.isDeleted = 1 
AND 
    IF @intUserType = 1 
     THEN Users.UserType > 0 
    ELSE IF @intUserType = 4 
     THEN Users.UserType <> 1 
    ELSE IF @intUserType = 3 
     THEN Users.UserType NOT IN(1,3,4) 
    END 
END 

감사합니다 도움.

답변

6
SELECT * FROM Users 
WHERE Users.isDeleted = 0 AND 
( 
    (@intUserType = 1) OR 
    (@intUserType = 4 AND Users.UserType <> 1) OR 
    (@intUserType = 3 AND Users.UserType IN (1,3,4)) 
) 
+0

감사합니다. – Robert

5
SELECT * FROM Users 
WHERE @intUserType = 1 AND Users.isDeleted = 0 
    OR (@intUserType = 4 AND Users.isDeleted = 0 AND Users.UserType <> 1) 
    OR (@intUserType = 3 AND Users.isDeleted = 0 AND Users.UserType IN (1,3,4)) 
0

여기에 단지 완성도,이 작업을 수행하는 또 다른 방법입니다. CASE 함수를 작성하여 WHERE 절에서 여러 표현식을 평가할 수 있습니다.

SELECT * 
FROM Users 
WHERE 
    CASE 
     WHEN @intUserType = 1 AND Users.isDeleted = 0 THEN 1 
     WHEN @intUserType = 4 AND Users.isDeleted = 0 AND Users.UserType <> 1 THEN 1 
     WHEN @intUserType = 3 AND Users.isDeleted = 0 AND Users.UserType IN (1,3,4) THEN 1 
     ELSE 0 
    END = 1;