sql-server - 我怎样才能让这个查询返回 0 而不是 null?

标签 sql-server tsql

我有这个查询:

SELECT (SUM(tblTransaction.AmountPaid) - SUM(tblTransaction.AmountCharged)) AS TenantBalance, tblTransaction.TenantID
    FROM tblTransaction
    GROUP BY tblTransaction.TenantID

但是它有一个问题;还有其他没有交易的 TenantID,我也想获取这些。

例如,事务表有 3 行用于 bob,2 行用于 john,没有行用于 jane。我希望它返回 bob 和 john 的总和,并为 jane 返回 0。 (如果没有其他方法,则可能为 null)

我该怎么做?

表格是这样的:

Tenants  
  ID  
  Other Data  
Transactions  
  ID  
  TenantID (fk to Tenants)
  Other Data  

最佳答案

(您没有说明您的 sql 引擎,因此我将链接到 MySQL 文档)。

这几乎正是 COALESCE() 的内容。函数的目的是。您可以向其提供一个列表,它将返回列表中的第一个非空值。您可以在查询中使用它,如下所示:

SELECT COALESCE((SUM(tr.AmountPaid) - SUM(tr.AmountCharged)), 0) AS TenantBalance, te.ID
FROM tblTenant AS te
    LEFT JOIN tblTransaction AS tr ON (tr.TenantID = te.ID)
GROUP BY te.ID;

这样,如果 SUM() 结果为 NULL,它将被零替换。

编辑:我使用 LEFT JOIN 以及 COALESCE() 重写了查询,我认为这是您最初缺少的关键。如果您仅从“事务”表中进行选择,则无法获取有关表中事物的信息。但是,通过使用租户表中的左联接,您应该为每个现有租户获取一行。

关于sql-server - 我怎样才能让这个查询返回 0 而不是 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884135/

相关文章:

sql - GROUP BY 同一列中的多个值

c# - 如果我的 sql 查询返回空白,我应该把我的 C# if 语句放在哪里?

sql - 如何根据单个列值有条件地限制结果

asp.net - SQL 服务器 : Replicate Schema changes to another database

sql - T-SQL : can I use a variable as a database reference

sql-server - 通过HTTP GET读取TSQL中的二进制数据

c# - 仅存储过程中的一列

sql-server - 使用 varchar(MAX) 或 varbinary(MAX) 在 SQL Server 中存储长度未定义的字符串

c# - 将文本框值插入数据库

c# - 如何让 C# 查询组件识别从 sql 存储过程中的临时表返回的数据列