我有两个表,一个是费用,另一个是tblinvoice。tblinvoice有一个主键发票ID,它是收费表中的外键。所以我想将每个发票的费用表中所有已支付的金额相加,然后将该金额与tblinvoice中对应的发票金额进行比较或等于。我试着用Google搜索,也尝试自己创建查询,但是没有运气。这是我尝试过的。
select fees.invoiceid, SUM(fees.amountpaid) AS finalpay from fees
INNER JOIN tblinvoice
ON fees.invoiceid = tblinvoice.invoiceid
WHERE fees.amountpaid >= (select tblinvoice.amount)
GROUP BY invoiceid
ORDER BY invoiceid
答案 0 :(得分:1)
首先为finalpay
中的每个invoiceid
获得fees
并加入tblinvoice
:
select
t.invoiceid, t.amount, f.finalpay
from tblinvoice t inner join (
select invoiceid, sum(amountpaid) as finalpay
from fees
group by invoiceid
) f on f.invoiceid = t.invoiceid
where f.finalpay >= t.amount
order by t.invoiceid
答案 1 :(得分:1)
您的条件应该在HAVING子句中,在这里您可以使用诸如SUM(fees.amountpaid)
或其别名finalpay
之类的聚合表达式。
SELECT tblinvoice.invoiceid, SUM(fees.amountpaid) AS finalpay
FROM tblinvoice
INNER JOIN fees ON fees.invoiceid = tblinvoice.invoiceid
GROUP BY tblinvoice.invoiceid, tblinvoice.amount
HAVING finalpay >= tblinvoice.amount
ORDER BY tblinvoice.invoiceid
根据服务器的版本和设置,您可以从GROUP BY子句中删除tblinvoice.amount
,因为它在功能上取决于tblinvoice.invoiceid
。