2013-11-04 33 views
0

我想添加一个基于变量的值CASE语句声明:WHERE基于CASE语句

WHERE DTH.PointPerson LIKE @userParam 
    AND ActivityDate >= @startDateParam 
    AND ActivityDate <= @endDateParam 

    --new section below 
    AND CASE (@orgTeamPK) 
    WHEN '%' THEN 
    (USR.[OrganizationalTeamId] LIKE @orgTeamPK OR USR.[OrganizationalTeamId] IS NULL) 
    ELSE 
    (USR.[OrganizationalTeamId] LIKE @orgTeamPK) 

但是我的语法似乎是关闭。我如何实现我在上面尝试做的事情?

+0

您可能想要包含一些测试数据,params的样例以及最重要的结果。到目前为止,你所拥有的是非常神秘的。可能正在考虑CTE或动态SQL。 – smoore4

+1

案件需要以END结尾。 – David

回答

1

你不需要case stmt。

WHERE DTH.PointPerson LIKE @userParam 
     AND ActivityDate >= @startDateParam 
     AND ActivityDate <= @endDateParam 
     AND (
      (@orgTeamPK = '%' AND (USR.[OrganizationalTeamId] LIKE @orgTeamPK OR USR.[OrganizationalTeamId] IS NULL)) 
      OR 
      (@orgTeamPK <> '%' AND (USR.[OrganizationalTeamId] LIKE @orgTeamPK)) 
1

正如@Anup提到的,你不需要 case语句,但恕我直言使用的情况下,使语法更清晰...... 每件在where子句必须是“上游”即它必须评估为布尔值。 where子句中的case语句不计算为布尔值。要修复,请将其更改如下:

WHERE DTH.PointPerson LIKE @userParam 
    AND ActivityDate >= @startDateParam 
    AND ActivityDate <= @endDateParam 

    --new section below 
    AND USR.OrganizationalTeamId Like 
     CASE (@orgTeamPK) WHEN '%' THEN coalesce(@orgTeamPK, USR.OrganizationalTeamId) 
       ELSE @orgTeamPK end