0

是否可以使用 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

非常感谢您提供任何信息。

新杰克

4

4 回答 4

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' )
    )
于 2013-02-14T23:39:56.190 回答
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
于 2013-02-14T23:33:34.783 回答
1

如果我正确理解您的意图,则无需IF, 或CASE就此而言。

就像这样的事情似乎是你想要做的......?

WHERE PrCity IS NOT NULL
AND (@ShowUnclaimed = 'Y'
    OR (Claimed = 'Y'
    AND SBIcon = 'N'))
AND Viewable = 'Y'
AND SystemID = 2
于 2013-02-14T23:41:13.357 回答
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

这只是一种方法。祝你好运。

于 2013-02-14T23:37:15.820 回答