如何让此查询返回0而不是null?

Mal*_*ist 5 t-sql sql-server

我有这个问题:

SELECT (SUM(tblTransaction.AmountPaid) - SUM(tblTransaction.AmountCharged)) AS TenantBalance, tblTransaction.TenantID
    FROM tblTransaction
    GROUP BY tblTransaction.TenantID
Run Code Online (Sandbox Code Playgroud)

但它有一个问题; 还有其他TenantID没有交易,我也希望得到这些.

例如,事务表有bob的3行,john的2行和jane的none.我希望它返回bob和john的总和并返回j为jane.(如果没有其他办法,可能为null)

我怎样才能做到这一点?

表格是这样的:

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

Cha*_*rch 16

(你没有陈述你的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;
Run Code Online (Sandbox Code Playgroud)

这样,如果SUM()结果为NULL,则将其替换为零.

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