2016-04-15 8 views
0

Ich versuche, einen Fall Aussage zu machen, wo man von der WHEN ist ein UND enthält.eine AND-Anweisung in einem Fall, in t sql

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 

Ich bekomme eine 1 als Ausgabe, wenn ExperationDate1 besteht und ExperationDate2 fehlschlägt.

Vielen Dank.

+0

Ist es möglich, dass Ihr SS.VerificationFlag 1 ist, wenn dies geschieht? – quest4truth

Antwort

1

Es ist nichts falsch mit Ihrem Fall Aussage. Ich habe es in einer SELECT-Klausel versucht und es funktioniert wie erwartet. Ich glaube, dass Sie eine 1 bekommen, weil der erste Fall wahr ist. Das heißt:

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

Feuer, bevor Sie zu der komplizierteren Klausel mit einer UND Aussage.

+0

Es ist mir peinlich, dass dies das eigentliche Problem ist. Ich muss einen schlechten Tag haben. Vielen Dank. – joerdie

+0

Keine Sorgen. Ein einfacher Fehler, wenn Sie sich auf die Syntax konzentrieren – 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 

Mit Ergebnisse:

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 
Verwandte Themen