2017-11-27 10 views
1

私はこのクエリを実行しようとしていますが、値が見つからない場合は、結果を取得する必要があります。私の戻り値はnullまたは空です。なぜIsNullそれdoes notのworK?

select top(1) 
ISNULL(CONVERT(DECIMAL(10,2),a.VatValue),0) as VatC 
from VatCodes a 
join 
InventoryMainGroupItems b on a.VatcodeID = b.VatCodeID 
join InventoryTransTemp c on c.CategoryID = b.MainGroupItemID 
where 
c.TrnDocumentID = '409' 
and 
a.VatcodeID = 3 

私の列はemtpyを返します。 私の望ましい結果は、少なくとも2つの可能性があります0 img1 img2

+0

のように修正することができますが、それは実際に結果を返さない?あなたの 'WHERE'条件に一致する行があるのですか? – Lamak

+0

はいそれは一致します。しかし、私はVatValueが存在し、それを得るために存在する場合のみ、私の行からチェックする必要があります – user8978978

+0

VatValue列はNULLを許可しますか?また、 'TOP(1)'では、クエリは1行しか返しません –

答えて

0

でなければなりません。

  1. ジョインとwhere句で指定された条件を満たす行はありません。 Also, I'd start using explicit joins
  2. VatValue doesntのは、」どんなNULL値が含まれているが、代わりに空の文字列をテストするために置き換える使用してみてくださいNULL

と同じではありません空のスペースが含まれています。

select top(1) 
ISNULL(REPLCACE(CONVERT(DECIMAL(10,2),a.VatValue),'',0),0) as VatC 
from VatCodes a 
join 
InventoryMainGroupItems b on a.VatcodeID = b.VatCodeID 
join InventoryTransTemp c on c.CategoryID = b.MainGroupItemID 
where 
c.TrnDocumentID = '409' 
and 
a.VatcodeID = 3 

これでうまくいかない場合は、条件は行を戻していません。ここでは、この任意の行を返すべきではありません...それを証明する方法です....

select top(1) 
a.VatValue as VatC 
from VatCodes a 
join 
InventoryMainGroupItems b on a.VatcodeID = b.VatCodeID 
join InventoryTransTemp c on c.CategoryID = b.MainGroupItemID 
where 
c.TrnDocumentID = '409' 
and 
a.VatcodeID = 3 
+0

Itおそらく私はそれを達成するための別の方法を試みるかもしれない – user8978978

+0

それから行がありません...私の編集を参照してください – scsimon

0

私が間違っている可能性が、私はInventoryMainGroupItemsVatCodeId列にNULLを持つ行があると思います。

これが事実であるならば、あなたは少しので

select top(1) 
ISNULL(CONVERT(DECIMAL(10,2),a.VatValue),0) as VatC 
from InventoryMainGroupItems b 
LEFT join 
VatCodes a on a.VatcodeID = b.VatCodeID 
INNER JOIN InventoryTransTemp c on c.CategoryID = b.MainGroupItemID 
where 
c.TrnDocumentID = '409' 
and 
a.VatcodeID = 3 
+0

それを忘れてしまいます。私は別の方法を試して助けてくれてありがとう – user8978978