2016-05-06 67 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

謝謝,即使這工作正常,感謝您的幫助! –