2016-07-12 5 views
-1

を適用することにより、行、私はレコードのセットを持っている以下としますセレクトどんな条件(IFまたはケース)

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 

私は上記のすべての行を選択したいが、ステータス= 1を持つ行の 、私はその条件を適用したい

select if status=1 and date<=getdate 

どうすればいいですか?

+0

あなたは実際にどのバージョンを使用していますか? –

答えて

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 

更新:

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

:あなたの編集ごとに、あなたは状況がNULL可能でない限り、私は、考えることができます最も簡単な方法where句

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

私は例として必要なものをあなたの答えを更新しました – Sandy

+0

これを参照してくださいこれは、テーブルをフィルタリングします。ステータス= 1で日付 Sandy

1

にあなたの条件を適用する必要がありますnull可能な場合は、これを行うことができます:

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

試用版:

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;