我有这个查询:

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

但是这有一个问题。还有其他的TenantID's没有交易,我也想获得这些交易。

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

我怎样才能做到这一点?

表格是这样的:

房客
ID
其他资料
交易次数
ID
租户ID(fk到租户)
其他资料

最佳答案

(您没有声明您的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()重写了查询,我认为这是您最初缺少的内容的关键。如果仅从“事务”表中选择,则无法获取有关表中的而不是的信息。但是,通过使用“租户”表中的左联接,您应该为每个现有的租户获得一行。

10-07 17:06