Compte tenu de la requête suivante:

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

J'obtiens ce résultat:

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

Le problème que je vois est que je n'obtiens pas la date de col remplie par la deuxième sélection. Je voudrais me débarrasser de tab_2_date et consolider une colonne date unique, agissant essentiellement comme un pivot.

Sortie désirée:

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

Remarque: Je ne peux pas utiliser directement le même date dans ma requête, car BigQuery ne prend pas en charge les noms de colonne en double.

0
SubZeno 19 avril 2020 à 12:23

2 réponses

Meilleure réponse
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

2
Francesco Galletta 19 avril 2020 à 10:35

Vous pouvez utiliser cette requête pour votre problème

Exemple de travail avec des exemples de données:

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

Tu devrais utiliser:

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
1
Sabri Karagönen 19 avril 2020 à 10:36