我可以通过PHP代码执行以下操作,但我觉得它很可能是在MySQL中完成的,所以只是找人帮我查询。
我有一份合约表,定义了客户的每月付款,比方说,例如每月500英镑。然后,我有另一张名为租的表,每月租金都输入。每个租金都有一个名为付费,未付和部分的状态。
到目前为止,我的查询是以下内容,我是否必须执行多个子查询,或者这是一个简单的方法。
SELECT cc.property_id, cc.property_rent, r.order_total, r.order_status,
SUM(CASE WHEN r.order_status = 'Partial' THEN cc.property_rent - r.order_total ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN
t_customers_rent r
ON cc.customer_id = r.customer_id WHERE cc.property_id = 62 AND r.transaction_type = 'rent' AND
(r.date_created BETWEEN '2017-04-05' AND '2019-04-05')
GROUP BY cc.property_id
基本上,如果租金状态是部分的,那么从通常的金额中减去它,然后减去欠款的总和。
期望的结果将是所欠的总和的SUM以及每个属性的贡献作为以下输出:
property_id,total_rent_made,total_rent_owed
当前的合约表结构和数据如下:
目前的租赁表结构和数据如下:
正如您所看到的,order_id 20和27是部分付款,根据这些ID的合同进行的实际付款应为750和700.
答案 0 :(得分:0)
我已设法解决它,它是以下查询。如果有人可以改进它,很高兴根据表现采取建议或更清洁。
SELECT cc.property_id,
SUM(CASE WHEN r.order_status = 'Partial' THEN (cc.property_rent - r.order_total) ELSE 0 END) AS partial_rent_owed
FROM t_customers_contract cc JOIN t_customers_rent r ON (cc.property_id = r.property_id)
WHERE cc.contract_id = r.contract_id
AND cc.customer_id = 7866
AND r.transaction_type = 'rent'
AND (r.date_created BETWEEN '2016-04-05' AND '2019-04-05')
GROUP BY cc.property_id