【发布时间】:2020-09-17 12:21:16
【问题描述】:
我有一个表,我正试图从中返回汇总结果,该表将包含两个数据集,一个用于每月发生的借记交易,另一个用于每月发生的付款。我正在查询的表如下所示:
ID amount type created_date
1 200 Debit 2020-02-14
2 150 Payment 2020-02-15
3 200 Payment 2020-02-21
4 100 Debit 2020-03-01
5 100 Debit 2020-03-05
6 50 Payment 2020-04-01
7 150 Payment 2020-04-02
我希望从我的查询中得到一个结果,它为每种类型执行一次 sum(amount) 并将它们联合在一起,以便结果看起来像这样:
month debit_sum payment_sum
February 200 350
March 200 0
April 0 200
到目前为止,我已经得到了以下查询,它返回的数据大多是正确的,但格式错误。
SELECT MONTHNAME(created_date) as month_name, type as type_name, sum(amount) as amount
FROM
(
SELECT created_date, amount, type
FROM balance_adjustments
WHERE type = 'Payment'
AND created_date > '2020-01-01'
GROUP BY MONTHNAME(created_date)
UNION ALL
SELECT created_date, amount, type
FROM balance_adjustments
WHERE type = 'Debit'
AND created_date > '2020-01-01'
GROUP BY MONTHNAME(created_date)
) AS adjustments
GROUP BY type, MONTHNAME(created_date)
ORDER BY created_date;
这将返回以下内容,您可以看到它为每种类型返回一行,但如果没有要求和的值,则不返回一行。如果我可以让它每个月返回 2 行(每种类型一个)并且没有值返回 0,我可以使用这种格式。
month type_name amount
February Debit 200
February Payment 350
March Debit 200
April Payment 200
我想不通的是,是否有一种方法可以返回上面不存在的值填充为 0,或者是否有一种方法可以将 sum(amount) 执行两次,每种类型分别执行一次列。
【问题讨论】:
-
这能回答你的问题吗? Group by month or 0 if not results?
-
不是真的,我不想定义它会返回的每个月,我希望能够传递一个日期并获取自该日期以来的所有月份。
标签: mysql sql datetime sum pivot