MYSQL创建摘要视图
我的情况的简化示例: 我有两个表(一个用于2017年,一个用于2018年),其中有两列,MYSQL创建摘要视图,mysql,view,Mysql,View,我的情况的简化示例: 我有两个表(一个用于2017年,一个用于2018年),其中有两列,类别和成本 这两个表可能共享一些类别,但它们各自也可能有一些独特的类别 我试图创建一个“主”视图,其中包含两个表之间所有类别的列表 这就是我所拥有的 Table: 2017_Summary +------------------+----------+ | Category | Cost | +------------------+----------+ | Home Improvem
类别
和成本
这两个表可能共享一些类别
,但它们各自也可能有一些独特的类别
我试图创建一个“主”视图,其中包含两个表之间所有类别的列表
这就是我所拥有的
Table: 2017_Summary
+------------------+----------+
| Category | Cost |
+------------------+----------+
| Home Improvement | -1000.00 |
| Mortgage | -800.00 |
| Groceries | -500.00 |
| Bills | -400.00 |
| Taxes | -300.00 |
+------------------+----------+
Table: 2018_Summary
+------------------+----------+
| Category | Cost |
+------------------+----------+
| Mortgage | -750.00 |
| Groceries | -550.00 |
| Bills | -400.00 |
| Car Payment | -350.00 |
| Taxes | -300.00 |
+------------------+----------+
这就是我想要的:
View: Summary
+------------------+-----------+-----------+
| Category | 2017_Cost | 2018_Cost |
+------------------+-----------+-----------+
| Home Improvement | -1000.00 | 0.00 |
| Mortgage | -800.00 | -750.00 |
| Groceries | -500.00 | -550.00 |
| Bills | -400.00 | -400.00 |
| Car Payment | 0.00 | -350.00 |
| Taxes | -300.00 | -300.00 |
+------------------+-----------+-----------+
CREATE VIEW SUMMARY (CATEGORY,2017_COST,2018_COST) AS
SELECT A.CATEGORY,A.COST,B.COST FROM 2017_SUMMARY A, 2018_SUMMARY B
WHERE A.CATEGORY = B.CATEGORY;
我知道如何创建包含两个表之间常见的类别的视图,但是我不知道如何也包括每个表唯一的类别,并为这些值填入0.00
。(如果方便的话,我也可以填写NULL
而不是0.00
。)
这就是我如何找到包含常见类别的视图的方法,但这并不是我想要的:
View: Summary
+------------------+-----------+-----------+
| Category | 2017_Cost | 2018_Cost |
+------------------+-----------+-----------+
| Home Improvement | -1000.00 | 0.00 |
| Mortgage | -800.00 | -750.00 |
| Groceries | -500.00 | -550.00 |
| Bills | -400.00 | -400.00 |
| Car Payment | 0.00 | -350.00 |
| Taxes | -300.00 | -300.00 |
+------------------+-----------+-----------+
CREATE VIEW SUMMARY (CATEGORY,2017_COST,2018_COST) AS
SELECT A.CATEGORY,A.COST,B.COST FROM 2017_SUMMARY A, 2018_SUMMARY B
WHERE A.CATEGORY = B.CATEGORY;
最后一个问题:如果使用了两个以上的表(例如,还与2016\u Summary
表结合使用),该视图会变得相当复杂吗?您应该为类别使用一个中间视图(对于某些mysql版本,视图中不允许使用subselect),并为成本使用一对左连接
CREATE VIEW all_category AS
select category
from 2018_Summary
union
select category
from 2017_Summary
;
CREATE VIEW SUMMARY AS
select a.category, ifnull(b.cost,0) as 2017_cost, ifnull(c.cost, 0)as 2018_cost
from all_category a
left join 2017_Summary b on a.category = b.category
left join 2018_Summary c on a.category = c.category
;
谢谢,这很有效,实际上有没有办法将0
放在占位符中而不是NULL
?起初我认为这无关紧要,但当您按升序排序时,它会将null置于顶部,但我希望它们位于底部。