SQL в BigQuery: консолидировать сводный столбец при использовании двойного выбора с полным объединением - PullRequest
0 голосов
/ 19 апреля 2020

Учитывая следующий запрос:

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 не поддерживает повторяющиеся имена столбцов.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020
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

1 голос
/ 19 апреля 2020

Вы можете использовать этот запрос для своей проблемы

Рабочий пример с примерами данных:

WITH
rawdata AS
(
  SELECT CAST('2020-03-28' as date) AS date, 'r2' as region, 10 as grob union all
  SELECT CAST('2020-03-29' as date) AS date, 'r1' as region, 20 as grob
)
select date, 
  MAX(CASE WHEN region = 'r1' THEN grob END) as grob_r1, 
  MAX(CASE WHEN region = 'r2' THEN grob END) as grob_r2
from rawdata
group by date

Вы должны использовать:

select date, 
  MAX(CASE WHEN region = 'r1' THEN grob END) as grob_r1, 
  MAX(CASE WHEN region = 'r2' THEN grob END) as grob_r2
from `mytab_tbl`
group by date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...