我的帐户具有与其关联的类别和订单表,其中订单可以是基于“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 年付款的日期,但如果没有付款,我还想显示所有带有零的类别制作。
我的处理方式是错误的吗?
如果有人知道其中一个问题或两个问题的解决方案,请提供您的解决方案。
最佳答案
SELECT cat, SUM(p.amount) balance
FROM accounts a
LEFT JOIN orders o
ON a.id = o.account_id
AND o.order_type = 1
LEFT JOIN payments p
ON o.id = p.order_id
AND YEAR(p.date) = 2012
GROUP BY a.cat
年份检查必须是 JOIN 条件,而不是 WHERE,因此不会排除没有付款的类别。
关于php - 不限制 where 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322410/