ms sql 2012案例语法

时间:2016-05-06 11:29:09

标签: sql sql-server sql-server-2008

我的表格survey_status_history包含caseId, strsurveystatus, dtcreated列。

我想从表中获取所有状态的记录,但在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

但我在>

附近收到错误

请建议查询中的更改。 提前谢谢。

2 个答案:

答案 0 :(得分: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,则逻辑稍微复杂一些。

答案 1 :(得分: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