2014-05-14 23 views
0

我使用的Visual Studio 2008和我在一份报告中试图创建一个具有WHERE语句,将返回所有查询记录,如果@parameter = 0,否则我希望查询只返回具有@paramete的记录。使用CASE当在WHERE语句来如果返回的所有记录@parameter = 0

这里是我设想的语句,但似乎无法得到正确的:

WHERE (ADVISOR.staffPersonID = CASE WHEN @advisor = 0 THEN **'Do NOT 
filter by staffpersonID'** ELSE @advisor END) 

我曾尝试以下代码工作:

CASE WHEN @advisor = 0 THEN ADVISOR.staffPersonID ELSE @advisor END 

ADVISOR.staffPersonID是如果@parameter的值不是0,我将过滤该字段。从我在线研究的情况来看,在声明中使用该字段本身作为THEN应该可行。它确实如此,除非表(advisor)根本没有匹配的记录。

回答

0
WHERE 
(@advisor <> 0 AND ADVISOR.staffPersonID = @advisor) 
OR 
(@advisor = 0) 
0

试试这个:

WHERE ADVISOR.staffPersonID = @advisor OR @advisor = 0 
0
WHERE ((ADVISOR.staffPersonID IS NULL AND @advisor = 0)  
    OR (ADVISOR.staffPersonID  = CASE WHEN @advisor = 0 THEN  
               ADVISOR.staffPersonID  
              ELSE  
               @advisor END 
           ))