我的帐户具有与其关联的类别和订单表,其中订单可以是基于“order_type”字段的债务或信用以及存储付款日期和金额的付款表(没有用于债务或信用的负数) .
目前我正在使用这样的东西:
SELECT cat, SUM(p.amount) balance
FROM accounts a
LEFT JOIN orders o ON a.id = o.account_id
LEFT JOIN payments p ON o.id = p.order_id
WHERE YEAR(p.date) = 2012
GROUP BY a.cat
第一个问题:
这将全部视为已付款,这是错误的,我尝试使用
sum(IF(o.order_type = 1, p.amount, p.amount * -1 ))
由于所有金额均为负数,因此未能给我正确的结果。
第二题:
它不会显示没有付款的类别,这里的限制因素是我需要确保我仅在 2012 年计算付款的日期,但如果没有付款,我还想显示所有类别为零。
我以错误的方式接近它吗?
如果有人知道任一问题或两者的解决方案,请提供您的解决方案。