2016-07-12 9 views
-1

Ich habe eine Reihe von Datensätzen annehmen unten:Wählen Sie Reihen von welchem ​​Zustand die Anwendung (wenn oder Fall)

Id Name status date 

1 xx  1  2016-06-27 14:05:17.447 
2 yy  2  2016-06-27 14:05:17.447 
3 zz  1  2016-06-27 14:05:17.447 
4 aa  2  2016-06-27 14:05:17.447 
5 bb  2  2016-06-27 14:05:17.447 

ich alle Zeilen von oben, sondern für die Zeilen auswählen möchten, die Status = 1, Ich möchte eine Bedingung anwenden, die

select if status=1 and date<=getdate 

Wie kann ich das tun?

+0

Mit welcher Version arbeiten Sie eigentlich? –

Antwort

1
select 
Id, 
Name, 
case when status =1 and date<getdate() then 'I want to select this row' else I don't want to select this row end as statuss 
,date 
from 
yourtable 

Update: wie pro Ihre bearbeiten, müssen Sie Ihre Bedingungen gelten, in denen Klausel

select * from yourtable 
where status=1 and date<getdate() 
+0

Bitte überprüfen Sie, ich habe Ihre Antwort mit dem, was ich als Beispiel benötigen – Sandy

+0

aktualisiert Jetzt sehen, wird dies die Tabelle filtern. Es werden nur die Datensätze ausgewählt, die den Status = 1 und das Datum Sandy

1

Der einfachste Weg, ich denken kann, es sei denn, Status NULL-Werte zugelassen:

SELECT Id, Name, Status, Date 
FROM TableName 
WHERE status <> 1 
OR date <= getdate() 

Wenn keine Nullwerte vorhanden sind, können Sie Folgendes tun:

SELECT Id, Name, Status, Date 
FROM TableName 
WHERE ISNULL(status, 0) <> 1 
OR date <= getdate() 
1

Versuchen Sie dies:

CREATE TABLE #Status 
    (
     Id INT 
    , Name CHAR(2) 
    , status INT 
    , date DATETIME 
    ); 

INSERT INTO #Status 
     (Id, Name, status, date) 
VALUES (1 -- Id - int 
      , 'xx' -- Name - char(2) 
      , 1 -- status - int 
      , '2016-06-27 14:05:17.447' -- date - datetime 
     ), 
     (2 -- Id - int 
      , 'yy' -- Name - char(2) 
      , 2 -- status - int 
      , '2016-06-27 14:05:17.447' -- date - datetime 
     ), 
     (3 -- Id - int 
      , 'zz' -- Name - char(2) 
      , 1 -- status - int 
      , '2016-06-27 14:05:17.447' -- date - datetime 
     ), 
     (4 -- Id - int 
      , 'aa' -- Name - char(2) 
      , 2 -- status - int 
      , '2016-06-27 14:05:17.447' -- date - datetime 
     ), 
     (5 -- Id - int 
      , 'bb' -- Name - char(2) 
      , 2 -- status - int 
      , '2016-06-27 14:05:17.447' -- date - datetime 
     ), 
     (6 -- Id - int 
      , 'cc' -- Name - char(2) 
      , 1 -- status - int 
      , '2016-07-27 14:05:17.447' -- date - datetime 
     ); 

SELECT * 
FROM #Status; 
WITH cte 
      AS (SELECT * 
       FROM  #Status 
       WHERE status <> 1 
      ) , 
     cteStatus1 
      AS (SELECT * 
       FROM  #Status 
       WHERE status = 1 
         AND date <= GETDATE() 
      ) 
    SELECT * 
    FROM cte 
    UNION 
    SELECT * 
    FROM cteStatus1; 
Verwandte Themen