2013-02-14 65 views
0

是否有可能做这样的事情与IF-ELSE,或类似的东西:T-SQL IF-ELSE

SELECT 
MemberID, 
ProfileTypeID 
PrCountryID, -- 3 
PrStateID,  -- 4 
PrStateInt 
FROM Member 
WHERE PrCity IS NOT NULL 
IF @ShowUnclaimed = 'N' 
    AND Claimed = 'Y' 
    AND SBIcon = 'N' 
END 
AND Viewable = 'Y' 
AND SystemID = 2 

事先的任何信息,非常感谢。

neojakey

回答

5

无需使用案例为这一

SELECT 
    MemberID, 
    ProfileTypeID 
    PrCountryID, -- 3 
    PrStateID,  -- 4 
    PrStateInt 
FROM Member 
WHERE PrCity IS NOT NULL 
AND Viewable = 'Y' 
AND SystemID = 2 
AND (@ShowUnclaimed != 'N' 
     OR (Clamed = 'Y' AND SBIcon = 'N') 
    ) 
+0

工作完美..非常感谢.. – neojakey 2013-02-14 23:50:37

1

您正在寻找的case表达(MSDN

SELECT MemberID, 
     ProfileTypeID 
     PrCountryID, -- 3 
     PrStateID,  -- 4 
     PrStateInt 

FROM Member 

WHERE PrCity IS NOT NULL 
     AND CASE 
       WHEN @ShowUnclaimed = 'N' AND Claimed = 'Y' AND SBIcon = 'N' THEN 1 
      END = 1 
     AND Viewable = 'Y' 
     AND SystemID = 2 
0

给这个使用CASE一试:

SELECT 
    MemberID, 
    ProfileTypeID 
    PrCountryID, -- 3 
    PrStateID,  -- 4 
    PrStateInt 
FROM Member 
WHERE PrCity IS NOT NULL 
    AND Viewable = 'Y' 
    AND SystemID = 2 
    AND Claimed = CASE WHEN @ShowUnclaimed = 'N' THEN 'Y' ELSE Claimed END 
    AND SBIcon = CASE WHEN @ShowUnclaimed = 'N' THEN 'N' ELSE SBIcon END 

这仅仅是一个办法做到这一点。祝你好运。

1

如果我理解你的意图正确,没有为此事需要IF,或CASE

就像这样的东西似乎是你正在试图做...?

WHERE PrCity IS NOT NULL 
AND (@ShowUnclaimed = 'Y' 
    OR (Claimed = 'Y' 
    AND SBIcon = 'N')) 
AND Viewable = 'Y' 
AND SystemID = 2