2016-05-06 44 views
-1

我有表survey_status_history它有列caseId, strsurveystatus, dtcreatedms sql 2012 case语法

我想从表中获取所有状态的记录,但是当status = 'pending'时,对于这种情况,查询应仅返回最近五天的记录。

以下是我的查询。

select * 
from survey_status_history ssh 
where nisactive = 1 
     and case when ssh.strsurveystatus = 'pending' 
       then ssh.dtcreated > DATEADD(DAY, 5 , GETDATE()) 
      end 

但我得到错误附近>

请建议在查询中的变化。 在此先感谢。

回答

1

SQL Server不理解布尔类型。我会建议没有case写这篇:

select * 
from survey_status_history ssh 
where nisactive = 1 and 
     (ssh.strsurveystatus <> 'pending' or 
     ssh.dtcreated > DATEADD(DAY, 5 , GETDATE()) 
    ); 

这假定strsurveystatus从未NULL。如果它是NULL,则逻辑稍微复杂一些。

+0

感谢您的及时响应。 我的查询应该返回所有记录的情况下没有挂起的情况下,但状态是挂起时,只有我必须检查该记录是否是最后5天记录或不。 –

+1

@MangeshKh - 这似乎是Gordon提供的查询产生的结果 - 如果您有不同的看法,您能提供一个应该返回的行的示例,而Gordon的查询不会或者反过来? –

+0

非常感谢,它为我工作! –

0

希望,这符合您的要求。

SELECT * 
FROM SURVEY_STATUS_HISTORY SSH 
WHERE NISACTIVE = 1 AND 
(SSH.STRSURVEYSTATUS <> 'PENDING' -- if not pending 
OR(SSH.STRSURVEYSTATUS = 'PENDING' AND SSH.DTCREATED >= DATEADD(DAY, -5 , GETDATE()))) -- if pending and last 5 days 
+0

谢谢,即使这工作正常,感谢您的帮助! –