sql - 如果不存在行,如何让 SQL Server 返回默认值 0?

标签 sql sql-server tsql

如果总和不返回任何行,如何获得默认值 0?

编辑:我编辑了这篇文章以添加更全面的示例(前一篇文章没有遇到)

例如

 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

这将返回

total_value, outstanding_value
==============
<No rows>

但我希望它返回 0 作为默认值。但是,如果您执行一次 SELECT 来选择它,然后再执行一次 SELECT 来选择默认值,则将返回 2 个结果集。

我可以只做一个吗?我已经研究过 COALESCE,但这仅在返回 NULL 时才有效,但事实并非如此。

编辑:我认为问题与组有关,但是是否有原因仍然没有返回任何结果?

最佳答案

试试这个

SELECT ISNULL(SUM(Debt) ,0)
FROM SupplierDebt
WHERE Id = @TestId

关于sql - 如果不存在行,如何让 SQL Server 返回默认值 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1438884/

相关文章:

sql - 将多个值传递给存储过程

mysql - SHOW * FROM 列在 10 分钟内 - mysql 查询

sql-server - 使用同步框架时,如何在客户端使用 SQL Server 更改跟踪服务器端跟踪更改?

sql-server - 复合 vs 代理主键

tsql - 将多行转换为一行,并以逗号作为分隔符

sql - 如何更新#temptable

sql - 子查询返回多个值

javascript - Sequelize js 如何使用 OR 运算符创建多个类似条件

c# - 无法从配置值打开数据库连接

SQL Server 2008 - 考虑自定义假期和周末,计算两个日期之间的业务分钟数