2017-11-27 4 views
1

Ich versuche, diese Abfrage auszuführen, und wenn es keinen Wert findet, muss ich Ergebnis 0. nehmen. Meine Rückkehr ist null oder leer.Warum funktioniert es nicht?

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 

Jetzt gibt meine Spalte empty zurück. Mein gewünschte Ergebnis sollte 0 sein img1 img2

+0

aber ist es zurückgeben tatsächlich ein Ergebnis ?, gibt es irgendwelche Zeilen, die Ihrer Suche nach 'where' Zustand? – Lamak

+0

ja sie sind übereinstimmen. Aber ich muss von meinen Zeilen nur überprüfen, wenn VatValue existiert und wenn es existiert, um es zu erhalten – user8978978

+0

Erlaubt die VatValue Spalte Nullen? Mit 'TOP (1)' gibt Ihre Anfrage nur eine Zeile zurück –

Antwort

0

Es gibt mindestens zwei Möglichkeiten.

  1. Keine Zeilen erfüllen die in der Joins- und Where-Klausel angegebenen Bedingungen. Also, I'd start using explicit joins
  2. Die Säule VatValue doesnt‘enthalten keine NULL Werte, sondern enthält leere Räume, die nicht das gleiche wie NULL

versuchen, für die leere Zeichenfolge zu verwenden, ersetzen zu testen ist.

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 

Wenn das nicht funktioniert, gibt Ihre Bedingung keine Zeilen zurück. Hier ist ein Weg, das zu beweisen ... dies keine Zeilen zurückgeben sollte ....

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 funktioniert nicht.Vielleicht werde ich einen anderen Weg versuchen, um dies zu erreichen – user8978978

+0

Dann gibt es keine Zeilen ... siehe meine Bearbeitung – scsimon

0

Ich könnte falsch sein, aber ich denke, die InventoryMainGroupItems hat Reihen mit einer Null in der VatCodeId Spalte.

Wenn dies der Fall ist, dann können Sie Ihr etwas ändern wie so

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

Vergiss es. Danke für Hilfe, ich werde einen anderen Weg versuchen – user8978978