mysql - MySQL 同一张表中两个查询的一个结果
问题描述
我很难理解这个问题。我有一张包含收入和支出的交易表,并且可以愉快地使用以下查询来获取每月摘要。
SELECT month(`Transaction Date`) as month, ROUND(SUM(`Credit` - `Debit`),2) as revenue
FROM `TABLE 1` WHERE `Account Group` = 'Income' AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY month
给出:
月 | 收入 |
---|---|
1 | 100.00 |
2 | 50.00 |
3 | 400.00 |
ETC | ETC |
和
SELECT month(`Transaction Date`) as month, ROUND(SUM(`Credit` - `Debit`),2) as cost
FROM `TABLE 1`
WHERE `Account Type` = 'cost' AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY month
给出:
月 | 成本 |
---|---|
1 | 53.00 |
2 | 20.00 |
3 | 9.99 |
ETC | ETC |
我想不出一个查询来将数据组合成一个结果,如下所示。我过去使用过 JOIN,但这都在一张表中。
月 | 成本 | 收入 |
---|---|---|
1 | 53.00 | 100.00 |
2 | 20.00 | 50.00 |
3 | 9.99 | 400.00 |
ETC | ETC | ETC |
任何帮助将不胜感激。非常感谢。
解决方案
尝试这个:
SELECT
month(`Transaction Date`) as month
, ROUND(SUM(CASE
WHEN `Account Group` = 'Income' THEN `Credit` - `Debit`
ELSE 0
END),2) as revenue
, ROUND(SUM(CASE
WHEN `Account Type` = 'cost' THEN `Credit` - `Debit`
ELSE 0
END),2) as cost
FROM `TABLE 1`
WHERE (`Account Group` = 'Income' OR `Account Type` = 'cost')
AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY month
推荐阅读
- java - 如何知道 WatchService 事件上的安全文件移动是否可行?
- bash - 为什么这个脚本在 for 循环之后什么都不做?
- google-data-studio - MULTIPLE 字段的直接链接中的 connectorConfig 存在问题
- javascript - 尝试测试使用来自 vuex 的 mapState 的 vue 组件
- javascript - 在for循环中的promise中表达js死锁
- reactjs - 如何在单元测试中访问子组件的功能
- java - 在以下情况下,如何使用反射为类中的所有对象调用方法?
- excel - 循环浏览行以匹配不同工作表上的两个单元格
- azure - 如何在 Vue / Hapi JS App 中使用 AzureAD 进行身份验证
- android - 反应原生,drawable/launch_screen.png 未找到