Join/Merge 多个 Table 具有相同的列名
Join/Merge Multiple Table with same column name
我想从下面的SQLFiddle
分别加入三个table
http://sqlfiddle.com/#!9/5dd558/4
现在我想根据日期和品牌从这个 table 创建一个 table。
比如,我想要这种方式的数据
日期, 品牌, 系列, Table_1_Viewers, Table_2_Viewers, Table_2_Viewers
如果 table 上的数据不匹配,则该字段应为空。
我做了什么
SELECT h.*,
a.`amazon_viewers` AS "Table_1_Viewers",
n.`views` AS "Table_2_Viewers",
FROM `Table-1` h
LEFT JOIN `Table-2` a
ON h.`date` = a.`date`
AND h.`brand` = a.`brand`
LEFT JOIN `Table-3` n
ON h.`date` = n.`date`
AND h.`brand` = n.`brand`
显然我正在从 table-1 中选择数据,因此它将仅显示来自 table-1 的品牌列,但我如何才能获得所有 table 的品牌列名称一列并合并这些 tables.??
我想要的输出...
| Date | Brand | Series | Table_1_Viewers | Table_2_Viewers | Table_3_Viewers |
|:----------:|:--------:|:--------------:|:---------------:|:---------------:|:---------------:|
| 12/1/2018 | TEST | TEST_SERIES | 100 | | |
| 10/15/2018 | MTV | GOT | 1000 | | 1000 |
| 12/1/2018 | TEST | Viking | 485632 | 856325 | |
| 12/1/2018 | TEST | Another Series | | 200 | |
| 10/15/2018 | POGO | GOT | | 1000 | |
| 7/1/2019 | No_Match | TEST_SERIES | | | 100 |
| 12/1/2018 | TEST-5 | Viking | | | 953022 |
您可以 union all
聚合:
select t.Date, t.Brand, t.Series_name,
sum(case when table_view = 't1' then amazone_viewer else 0 end) as Table_1_Viewers,
. . .
from (select h.date, h.brand, h.series_name, h.amazone_viewer, 't1' as table_view
from `Table-1` h union all
select h1.date, h1.brand, h1.series, h1.viewes, 't2'
from `Table-2` h1 union all
. . .
) t
group by t.Date, t.Brand, t.Series_name;
我想从下面的SQLFiddle
分别加入三个tablehttp://sqlfiddle.com/#!9/5dd558/4
现在我想根据日期和品牌从这个 table 创建一个 table。 比如,我想要这种方式的数据
日期, 品牌, 系列, Table_1_Viewers, Table_2_Viewers, Table_2_Viewers
如果 table 上的数据不匹配,则该字段应为空。
我做了什么
SELECT h.*,
a.`amazon_viewers` AS "Table_1_Viewers",
n.`views` AS "Table_2_Viewers",
FROM `Table-1` h
LEFT JOIN `Table-2` a
ON h.`date` = a.`date`
AND h.`brand` = a.`brand`
LEFT JOIN `Table-3` n
ON h.`date` = n.`date`
AND h.`brand` = n.`brand`
显然我正在从 table-1 中选择数据,因此它将仅显示来自 table-1 的品牌列,但我如何才能获得所有 table 的品牌列名称一列并合并这些 tables.??
我想要的输出...
| Date | Brand | Series | Table_1_Viewers | Table_2_Viewers | Table_3_Viewers | |:----------:|:--------:|:--------------:|:---------------:|:---------------:|:---------------:| | 12/1/2018 | TEST | TEST_SERIES | 100 | | | | 10/15/2018 | MTV | GOT | 1000 | | 1000 | | 12/1/2018 | TEST | Viking | 485632 | 856325 | | | 12/1/2018 | TEST | Another Series | | 200 | | | 10/15/2018 | POGO | GOT | | 1000 | | | 7/1/2019 | No_Match | TEST_SERIES | | | 100 | | 12/1/2018 | TEST-5 | Viking | | | 953022 |
您可以 union all
聚合:
select t.Date, t.Brand, t.Series_name,
sum(case when table_view = 't1' then amazone_viewer else 0 end) as Table_1_Viewers,
. . .
from (select h.date, h.brand, h.series_name, h.amazone_viewer, 't1' as table_view
from `Table-1` h union all
select h1.date, h1.brand, h1.series, h1.viewes, 't2'
from `Table-2` h1 union all
. . .
) t
group by t.Date, t.Brand, t.Series_name;