Wie kann ich einen Standardwert von 0 erhalten, wenn eine Summe keine Zeilen liefert?
Edit: Ich habe diesen Beitrag bearbeitet, um ein ausführlicheres Beispiel hinzuzufügen (das im vorherigen Beitrag nicht enthalten war)
z.B.
DECLARE @Item TABLE
(
Id int,
Price decimal,
PricePer decimal
)
DECLARE @OrderItem TABLE
(
Id int,
ItemId int,
ChargedPrice nvarchar(10),
QtyRequired int,
QtyLeftToDespatch int
)
INSERT INTO @Item (Id,Price,PricePer) VALUES (1,1.00, 1)
INSERT INTO @Item (Id,Price,PricePer) VALUES (2,2.00, 1)
INSERT INTO @Item (Id,Price,PricePer) VALUES (3,3.00, 1)
INSERT INTO @Item (Id,Price,PricePer) VALUES (4,4.00, 1)
INSERT INTO @OrderItem (Id, ItemId,ChargedPrice,QtyRequired,QtyLeftToDespatch) VALUES ( 1,1,100,100,50 )
INSERT INTO @OrderItem (Id, ItemId,ChargedPrice,QtyRequired,QtyLeftToDespatch) VALUES ( 2,1,200,300,50)
INSERT INTO @OrderItem (Id, ItemId,ChargedPrice,QtyRequired,QtyLeftToDespatch) VALUES ( 3,1,300,300,50 )
DECLARE @ItemIdTest int
SET @ItemIdTest = 4
SELECT SUM((price/priceper)*QtyRequired) as total_value,
SUM((price/priceper)*QtyRequired) as outstanding_value
FROM @Item i
INNER JOIN @OrderItem o ON i.Id = o.ItemId
WHERE i.Id = @ItemIdTest
group by itemId
Dies ergibt
total_value, outstanding_value
==============
<No rows>
Ich möchte aber, dass als Standardwert 0 zurückgegeben wird. Wenn Sie jedoch ein SELECT durchführen, um es auszuwählen, und dann ein zweites SELECT, um einen Standardwert auszuwählen, werden 2 Ergebnismengen zurückgegeben.
Kann ich es nur in einem tun? Ich habe mir COALESCE angesehen, aber das funktioniert nur, wenn NULL zurückgegeben wird, was nicht der Fall ist.
bearbeiten : Ich denke, dass das Problem mit der Gruppe mit zu tun hat, aber gibt es einen Grund, warum es immer noch keine Ergebnisse gibt?