¿Cómo puedo obtener un valor predeterminado de 0 si una suma no devuelve ninguna fila?¿Cómo hacer que SQL Server devuelva un valor por defecto de 0, si no existen filas?
Edición: He editado este post para añadir un ejemplo más detallado (que la anterior no encontró)
P. ej
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
Esto devolverá
total_value, outstanding_value
==============
<No rows>
Pero yo quiero que tenga 0 como valor predeterminado devuelto. Sin embargo, si hace un SELECCIONAR para seleccionarlo, entonces se devolverá un segundo SELECCIONAR para seleccionar un predeterminado, 2 conjuntos de resultados.
¿Puedo hacerlo solo en una? He examinado COALESCE, pero esto solo funciona si se devuelve NULL, que no es así.
Editar: Creo que el problema tiene que ver con el grupo, pero ¿hay alguna razón por la que todavía no se obtenga ningún resultado?
He cambiado el ejemplo, que experimenta el error, en lugar del que creé antes de –