8 Stimmen

Wie bringe ich SQL Server dazu, einen Standardwert von 0 zurückzugeben, wenn keine Zeilen vorhanden sind?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X