首页 > 解决方案 > BigQuery 上的 SQL:使用完全连接的双重选择时合并数据透视列

问题描述

给定以下查询:

SELECT TAB_1.*, TAB_2.* EXCEPT(date), TAB_2.date AS tab_2_date FROM
  (
    SELECT
      date,
      grob as `grob_r1`
    FROM `mytab_tbl`
    WHERE region = "r1"
  )
  AS TAB_1 FULL JOIN 
  (
    SELECT
      date,
      grob as `grob_r2`
    FROM `mytab_tbl`
    WHERE region = "r2"
  )
  AS TAB_2
ON TAB_1.date = TAB_2.date

我得到这个结果:

Row   | date         | grob_r1  | grob_r2   | tab_2_date    
=========================================================
1     | null         | null     | 10        | 2020-03-28
2     | 2020-03-29   | 20       | null      | null

我看到的问题是我没有得到第二个选择填充的 col 日期。我想摆脱tab_2_date和巩固一个独特的date专栏,基本上充当一个支点。

期望的输出:

Row   | date         | grob_r1  | grob_r2   
==========================================
1     | 2020-03-28   | null     | 10
2     | 2020-03-29   | 20       | null      

注意:我不能date在查询中直接使用相同的名称,因为 BigQuery 不支持重复的列名。

标签: sqlgoogle-bigquery

解决方案


WITH aux AS (
    SELECT date, region, grob FROM `mytab_tbl` WHERE region IN ('r1', 'r2')
)

SELECT 
    date
    , MAX(IF(region = 'r1', grob, NULL)) AS grob_r1
    , MAX(IF(region = 'r2', grob, NULL)) AS grob_r2

FROM aux 

GROUP BY 1


推荐阅读