2016-04-15 4 views
0

WHENのいずれかにANDが含まれているケースステートメントを作成しようとしています。t SQLのCASEでANDステートメントを使用する

Declare @FROM DateTime = 'OCT 1 2015 12:00AM' 
,case when isnull(SS.VerificationFlag,0) = 1 then 1 
     when isnull(SS.ExperationDate1,@FROM) >= @FROM AND isnull(SS.ExperationDate2,@FROM) >= @FROM then 1 
     else 0 
END 

ExperationDate1が成功し、ExperationDate2が失敗した場合、出力として1が出力されます。

ありがとうございます。

+0

それはこの問題が発生したとき、あなたのSS.VerificationFlagが1であることは可能ですか? – quest4truth

答えて

1

あなたのcase文に間違いはありません。私はselect句で試して、期待どおりに動作します。私は、最初のケースが真だから1を得ていると信じています。つまり、ANDステートメントでより複雑な節に達する前に起動します。

when isnull(SS.VerificationFlag,0) = 1 then 1 

結果と

+0

これは実際の問題だと私は恥ずかしいです。私は悪い一日を過ごしているに違いない。ありがとうございました。 – joerdie

+0

心配はいりません。あなたが構文に集中しているなら、簡単に間違いを作る – quest4truth

0
DROP TABLE SS; 
go 

create table SS (
    VerificationFlag tinyint, 
    ExpirationDate1 datetime, 
    ExpirationDate2 datetime 
) 

INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (0, NULL, NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (0, '20140214', NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (0, NULL, '20160619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (0, '20140214', '20160619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, NULL, NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, '20140214', NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, NULL, '20160619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, '20140214', '20160619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, NULL, NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, '20160214', NULL) 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, NULL, '20140619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (1, '20160214', '20140619') 
INSERT INTO SS(VerificationFlag, ExpirationDate1, ExpirationDate2) VALUES (0, '20160214', '20140619') 

DECLARE @from DATETIME; 
SET @from = '20151001'; 

SELECT 
    SS.VerificationFlag, 
    SS.ExpirationDate1, 
    SS.ExpirationDate2, 
    @from AS FromDate, 
    CASE 
    WHEN ISNULL(SS.VerificationFlag, 0) = 1 THEN 1 
    WHEN (ISNULL(SS.ExpirationDate1, @from) >= @from) AND (ISNULL(SS.ExpirationDate2, @from) >= @from) THEN 1 
    ELSE 0 
    END AS ResultingFlag 
FROM SS 

VerificationFlag ExpirationDate1   ExpirationDate2   FromDate    ResultingFlag 
---------------- ----------------------- ----------------------- ----------------------- ------------- 
0    NULL     NULL     2015-10-01 00:00:00.000 1 
0    2014-02-14 00:00:00.000 NULL     2015-10-01 00:00:00.000 0 
0    NULL     2016-06-19 00:00:00.000 2015-10-01 00:00:00.000 1 
0    2014-02-14 00:00:00.000 2016-06-19 00:00:00.000 2015-10-01 00:00:00.000 0 
1    NULL     NULL     2015-10-01 00:00:00.000 1 
1    2014-02-14 00:00:00.000 NULL     2015-10-01 00:00:00.000 1 
1    NULL     2016-06-19 00:00:00.000 2015-10-01 00:00:00.000 1 
1    2014-02-14 00:00:00.000 2016-06-19 00:00:00.000 2015-10-01 00:00:00.000 1 
1    NULL     NULL     2015-10-01 00:00:00.000 1 
1    2016-02-14 00:00:00.000 NULL     2015-10-01 00:00:00.000 1 
1    NULL     2014-06-19 00:00:00.000 2015-10-01 00:00:00.000 1 
1    2016-02-14 00:00:00.000 2014-06-19 00:00:00.000 2015-10-01 00:00:00.000 1 
0    2016-02-14 00:00:00.000 2014-06-19 00:00:00.000 2015-10-01 00:00:00.000 0 
関連する問題