2016-05-06 8 views
-1

Ich habe Tabelle survey_status_history, die Spalten caseId, strsurveystatus, dtcreated hat.ms sql 2012 Fall-Syntax

Ich möchte Datensatz aus der Tabelle für alle Status abrufen, aber wenn status = 'pending', für diesen Fall Abfrage nur für die letzten fünf Tage zurückgeben sollte.

Unten ist meine Abfrage.

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

Aber ich bin immer Fehler in der Nähe von >

vorschlagen bitte die Änderungen in Abfrage. Vielen Dank im Voraus.

Antwort

1

SQL Server versteht keinen booleschen Typ. Ich würde empfehlen, diese case ohne zu schreiben:

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

Dies setzt voraus, dass strsurveystatus ist nie NULL. Wenn es NULL ist, ist die Logik etwas komplizierter.

+0

danke für die schnelle Antwort. Meine Abfrage sollte alle Datensätze zurückgeben, wenn der Status nicht aussteht, aber wenn der Status aussteht, dann muss nur überprüft werden, ob der Datensatz der letzten 5 Tage ist oder nicht. –

+1

@MangeshKh - das scheint, was die Abfrage Gordon geliefert hat produziert - wenn Sie anders denken, können Sie ein Beispiel für eine Zeile, die zurückgegeben werden sollte, die Gordon Abfrage nicht oder umgekehrt? –

+0

Vielen Dank, es hat für mich funktioniert !!! –

0

Hoffe, das entspricht Ihrer Anforderung.

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

Danke, auch das funktioniert gut, danke für die Hilfe !!! –