2009-05-15 25 views
1

私は、95%の時間で動作するCASE文を含むクエリを設定しています。その5%はデータが存在しないためです。 「A」はTHEN THEN「D」のWHEN「アピール」 CASEのPRDE.STATUSCODE「解雇」:これが可能であるならば、私はちょうど知っている...役立つポインタを示し、他のデータ...条件付きSQLケース

そうですときにはフィールドは ''ですが、SATISFIEDDATEという名前のテキストフィールドにデータが入力される可能性があります...できますか?以下のようなここで何か書く:CASEを '' THEN [場合SATISFIEDDATE <> '' そして '満足'] ...これは愚かな簡単であれば

申し訳ありません:)

+0

SATISFIEDDATEがnullではなく、STATUSCODEがSではない場合はどうなりますか?どういう意味ですか? – ErikE

答えて

1

あなたは、他のCASE文を持つことができます。

CASE '' THEN CASE WHEN SatisfiedDate != '' THEN 'Satisfied' END 

代替は次のようになります:

CASE 
    WHEN PRDE.STATUSCODE = 'A' THEN 'Appealed' 
    WHEN PRDE.STATUSCODE = 'D' THEN 'Dismissed' 
    WHEN PRDE.STATUSCODE = 'P' THEN 'Pending' 
    WHEN PRDE.STATUSCODE = 'S' 
     OR (PRDE.STATUSCODE = '' AND SatisfiedDate != '') THEN 'Satisfied' 
    WHEN PRDE.STATUSCODE = 'T' THEN 'Settled' 
END AS STATUS 
2
CASE 
    WHEN PRDE.STATUSCODE='A' THEN 'Appealed' 
    WHEN PRDE.STATUSCODE='D' THEN 'Dismissed' 
    WHEN PRDE.STATUSCODE='P' THEN 'Pending' 
    WHEN PRDE.STATUSCODE='S' OR (PRDE.STATUSCODE='' AND LEN(SatisfiedDate)>0) THEN 'Satisfied' 
    WHEN PRDE.STATUSCODE='T' THEN 'Settled' 
    ELSE '?null/unknown?' 
END AS STATUS 
0

CASE PRDE.STATUSCODE 
    WHEN 'A' THEN 'Appealed' 
    WHEN 'D' THEN 'Dismissed' 
    WHEN 'P' THEN 'Pending' 
    WHEN 'S' THEN 'Satisfied' 
    WHEN 'T' THEN 'Settled' 
    else 
     case 
      when SATISFIEDDATE is not null then 'Satisfied' 
     end 
END AS STATUS 
+0

私は、あなたの日付フィールドが読み込み日時フィールド – DForck42

+0

"だが、SATISFIEDDATEというテキストフィールドが多分..." –

0

はたぶん、これはあなたが探しているものであるとき、あなたは他の句でまたはのいずれかで、nexted case文を行うことができます。

CASE PRDE.STATUSCODE 
WHEN 'A' THEN 'Appealed' 
WHEN 'D' THEN 'Dismissed' 
WHEN 'P' THEN 'Pending' 
WHEN 'S' THEN 'Satisfied' 
WHEN 'T' THEN 'Settled' 
WHEN '' AND NULLIF(PRDE.SATISFIEDDATE, '') IS NOT NULL THEN 'Satisfied' END AS STATUS