SQL联合但垂直

时间:2018-08-27 12:03:01

标签: sql join

最近开始使用SQL中的简单查询

我想知道是否有可能像“联合”一样水平地垂直添加数据

我有两个选择要合并

month year data1 data2 grouped by month, year
month year data3 data4 grouped by month, year

我要存档的是

month year data1 data2 data3 data4

是否有任何功能可以像Union一样进行存档?我试图通过“加入”来做到这一点,但失败了

1 个答案:

答案 0 :(得分:1)

听起来像FULL JOIN可能就是您想要的。它包括来自两个操作数的所有行,这些行组合了满足ON子句中表达式的行。如果另一个操作数中没有匹配的伙伴行,则另一个操作数的列将填充NULL。这就是为什么需要coalesce()来获取年份或月份的原因。

SELECT coalesce (x1.year, x2.year) year,
       coalesce (x1.month, x2.month) month,
       x1.data1,
       x1.data2,
       x2.data3,
       x2.data4
       FROM (<your first grouping query>) x1
            FULL JOIN (<your second grouping query>) x2
                      ON x2.year = x1.year
                         AND x2.month = x1.month;

分别用第一个或第二个查询替换<your first grouping query><your second grouping query>