如果在sql server中的sql查询中找不到行,如何获取0

如果在sql server中的sql查询中找不到行,如何获取0,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我从sql server获取此查询的空值 SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678' 它没有行,这就是它返回空白的原因,所以我想如果没有行,它应该返回0 我已经尝试过使用COALESCE,但它不起作用 如何解决此问题?您可以将子查询包装在ISNULL中: SELECT ISNULL((SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678' ORDER BY ???

我从sql server获取此查询的空值

SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678'
它没有行,这就是它返回空白的原因,所以我想如果没有行,它应该返回0

我已经尝试过使用COALESCE,但它不起作用


如何解决此问题?

您可以将子查询包装在
ISNULL
中:

SELECT ISNULL((SELECT TOP 1 Amount from PaymentDetails WHERE Id = '5678' ORDER BY ????),0) AS Amount;
不要忘记在您的
订单中添加一列(或多列)
,否则当多行的
Id
值相同时,您将得到不一致的结果。但是,如果
Id
是唯一的,则删除
TOP
ORDER BY
,因为它们不需要


但是,除非您对不一致的结果感到“满意”,否则您不应在没有订单的情况下使用
TOP

您选择的是任意金额,因此一种方法是聚合:

SELECT COALESCE(MAX(Amount), 0) 
FROM PaymentDetails
WHERE Id = '5678';
请注意,如果
id
是一个数字,则不要使用单引号进行比较

老实说,我希望
SUM()
比任意值更有用:

SELECT COALESCE(SUM(Amount), 0) 
FROM PaymentDetails
WHERE Id = '5678';

为什么
TOP
没有
orderby
?如果有多行,您对任意值满意吗?我假设您将这个值设置为标量变量?如果是这样的话,为什么不将子查询包装在
ISNULL
中,或者在应用程序中处理
NULL
值呢?实际上,它只针对一个标量变量。您能解决这个sql吗。请注意,它遗漏了一个左边的副词apoligies@Vidhya。