2017-05-05 3 views
3

私はまっすぐに思える問題がありますが、何らかの理由でブローセレクトからnull値を取り除くことができません。私がこれを行うために必要なのは、NULL値のない行を1行だけ返すことだけです。誰かが私の方法でエラーを指摘してくれますか? :)これらのダムを削除するNULLS

実行しているときに私が得る結果:

EffectiveDate   Refund 
2015-05-18 00:00:00.000 NULL 
2015-05-18 00:00:00.000 1 

が、私は戻って何を期待:

EffectiveDate   Refund 
2015-05-18 00:00:00.000 1 

マイクエリ:

select md.EffectiveDate, 
     CASE 
     WHEN 
      ISNULL(ConfigID,'') = 3 THEN '1' 
     WHEN 
      ISNULL(ConfigID,'') = 4 THEN '2' 
     END AS Refund 
from dbo.PartnerBankConfig md 
where md.PartnerID= 100000509 
and md.EffectiveDate = (select max(EffectiveDate) 
         from dbo.PartnerBankConfig 
         where PartnerID = 100000509 
         and ISNULL(ConfigID,'') IS NOT NULL) 
+3

さてあなたは、空の文字列にNULL値を変換するために、ISNULLを使用するならば、決してNULLではありませんTrueに評価してください... –

+2

@JacobH:Falseに評価されません –

+0

'とISNULL(ConfigID、 '')IS NOT NULL)を'とConfigID IS NOT NULL'に置き換えてください。 –

答えて

3

あなたにデータがcase文のどの条件とも一致しないため、このnullを取得します。つまり、その行には、3と4のどちらでもないConfigIDの値があります。条件が一致しない場合のcase文の動作は、NULLと評価されるため、この行にはNULLが戻されます。

さらに、この関数:ISNULL(ConfigID,'')は、nullを空の文字列(null以外の値)で置き換えます。

したがって、ISNULL(ConfigID,'') IS NOT NULLは意味がありません。 ISNULLは常にnull以外の値を返すため、常にtrueになります。クエリのうち、使用する必要がないため、すべての使用を削除する必要があります。ISNULL()

3

Danが説明しているように、ISNULL()の使用は不適切です。

select md.EffectiveDate, 
     (CASE WHEN ConfigID = 3 THEN 1 
      WHEN ConfigID = 4 THEN 2 
     END) as Refund 
from (select md.*, max(EffectiveDate) over (partition by PartnerId) as maxed 
     from dbo.PartnerBankConfig md 
     where md.PartnerID = 100000509 and 
      configId in (3, 4) 
    ) md 
where md.EffectiveDate = maxed; 

あるいは、もっと単純に:あなたの説明からは、この単純なクエリをしたいように見える

select top (1) with ties md.EffectiveDate, 
     (CASE WHEN ConfigID = 3 THEN 1 
      WHEN ConfigID = 4 THEN 2 
     END) as Refund 
from (select md.*, max(EffectiveDate) over (partition by PartnerId) as maxed 
     from dbo.PartnerBankConfig md 
where md.PartnerID = 100000509 and 
     ConfigId in (3, 4) 
order by EffectiveDate desc; 
+0

皆様のご意見ありがとうございました。これは正しい方向に進んでいます。もう一度ありがとう! – PeteMiller

関連する問題