UNION ALL 具有不同列名的表

hhh*_*hh_ 6 sql amazon-redshift

我有两个相似的表,我试图将它们加入一个联盟,然后可能进行分组。我希望在表不重叠的地方添加一列 null 或 0。

SELECT count(traffic_volume_1) as traffic_volume_1, 
       traffic_source, 
       timestamp
FROM table_1
UNION ALL 
       count(traffic_volume_2) as traffic_volume_2, 
       traffic_source, 
       timestamp
FROM table_2
...?
Run Code Online (Sandbox Code Playgroud)

我正在寻找如下所示的回报:

traffic_volume_1, traffic_volume_2, timestamp, traffic_source
77777           , 0               , 2018-02-09, US
0               , 928320          , 2018-02-09, EU
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Noe*_*edy 0

如果您在运行查询之前知道需要的额外列数,答案很简单:您不需要 UNION,而是在 FROM 中的单独子句中对每个表执行查询,并在 Traffic_source 和时间戳上加入它们。

但是,如果您在运行查询之前不知道将有多少列,那么您需要的是交叉表数据透视查询。

数据透视查询将不同的行值转换为额外的列。您可以直观地将其视为查询记录集旋转 90 度;引擎不会生成新行,而是生成新列。

数据透视查询语法是 SQL 中特定于平台的,因为它是非标准的。不确定您使用的是什么平台,但请检查是否支持交叉表/数据透视查询。