我有这个查询:
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/