2017-11-14 1 views
0

なぜこのセレクト・ケース・ステートメントでは 'XXX'値が機能しません。空白を返すようにしたいが、それは 'RNC'と同じ文字列を返す。値の1つに対して選択されたケースが機能しません

SELECT SHORT_DESC = 
     CASE 
     WHEN MAIL_CODE1 <> 'RNC' THEN SHORT_DESC 
     WHEN MAIL_CODE1 = 'XXX' THEN ' ' 
     ELSE 'Request No Contact'  
     END 
FROM (select 1 dummy) dummy 
left join TMS_MAILING_1 m ON m.MAIL_CODE1 = 'XXX'--${MailCode} 
    GROUP BY SHORT_DESC, MAIL_CODE1; 
+0

私は意味 'RNC''「XXX''は'と等しくない」、第1の条件が真であり、これは、単純な論理である – Lamak

+0

が指定された値を返します。 MAIL_CODE1 <> 'RNC'は、MAIL_CODE1 = 'XXX'の場合、最初の条件が満たされたことを意味します... –

+0

これは表示されますが、表示する必要がある値を返すにはどうすればよいですか。あなたのおかげで助けてください – user2831724

答えて

3

これはいかがですか?

SELECT SHORT_DESC = 
     CASE 
     WHEN MAIL_CODE1 = 'XXX' THEN ' ' 
     WHEN MAIL_CODE1 <> 'RNC' THEN SHORT_DESC 
     ELSE 'Request No Contact'  
     END 
FROM (SELECT 1 dummy) dummy 
    LEFT JOIN TMS_MAILING_1 m ON m.MAIL_CODE1 = 'XXX'--${MailCode} 
GROUP BY SHORT_DESC, MAIL_CODE1; 

条件の検証順序は、最初と最後まで行くから始まり、CASE文であり覚えておいてください。

最初の有効な条件が返されます。この場合はTRUEです。

常に平等であることを確認してから平等でないことを確認する必要があります。

また、クエリロジックがちょっと変わっているようです。あなたは以下のコードを使用して、ちょうどクエリがあなたの入力に基づいて振る舞うかを確認するために@PARAM変数の値を変更することができ、テスト目的のために

DECLARE @PARAM NVARCHAR(MAX) = 'XXX'--${MailCode} 

SELECT 
    SHORT_DESC = CASE 
     WHEN MAIL_CODE1 = 'XXX' 
      THEN '' 
     WHEN MAIL_CODE1 <> 'RNC' 
      THEN SHORT_DESC 
     ELSE 'Request No Contact' 
    END 
FROM TMS_MAILING_1 
WHERE MAIL_CODE1 = @PARAM 

:私のようなクエリを書き換えたいです。

DECLARE @PARAM NVARCHAR(MAX) = 'XXX'--${MailCode} 

SELECT 
    SHORT_DESC = CASE 
     WHEN MAIL_CODE1 = 'XXX' 
      THEN '' 
     WHEN MAIL_CODE1 <> 'RNC' 
      THEN 'SHORT_DESC' 
     ELSE 'Request No Contact' 
    END 
FROM (SELECT @PARAM AS MAIL_CODE1) X 
WHERE MAIL_CODE1 = @PARAM 
+0

私はそれを試したが、それでもRNCの結果を与える。 mail_code1は変数として渡され、tms_mailing_1テーブルの値を検索します。しかし、 'RNC'と 'XXX'は渡されますが、ユーザーは表にないため、上記の値を持つことを望みます。それは意味があります...あなたの助けをありがとう。 – user2831724

+0

@ user2831724さて、あなたは何を渡していますか?あなたは 'XXX'を渡していますか?あなたが渡している値が 'XXX'以外のものであれば、2番目の条件は真と評価されます。 –

+0

"RNC"、 "XXX"、またはテーブルに有効なコードが5つある有効なコードを渡すことができます。この場合 – user2831724

関連する問題