Как горизонтально объединить столбцы из разных таблиц? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть Таблица A с одним столбцом Город выглядит следующим образом (первые 10 строк):

Город

    Torrance
    San Carlos
    San Jose
    Walnut Creek
    Carmichael
    Anderson
    Altadena
    Orange
    Palos Verdes Estates

И Таблица B с одним столбцом Имя, подобное этому (первые 10 строк):

Имя

    Merrill
    Elm
    Blossom Hill
    Brandywine
    Altamont
    Hill
    Wapello
    Palmyra
    Via Almar

Мне нужно получить новый Таблица C с двумя столбцами City и Name из первых 1000 строк таблицы A и первых 1000 строк таблицы B.

Полученная таблица должна выглядеть следующим образом (первые 10 строк):

Город .......................................... Имя

Torrance                Merrill
San Carlos              Elm
San Jose                Blossom Hill
Walnut Creek            Brandywine
Carmichael              Altamont
Anderson                Hill
Altadena                Wapello
Orange                  Palmyra
Palos Verdes Estates    Via Almar

Вопрос в том, как соединить по горизонтали первые 1000 строк каждой таблицы?

1 Ответ

1 голос
/ 25 мая 2019

Ниже для стандартного SQL BigQuery (также см. Мои комментарии ниже вашего вопроса)

#standardSQL
SELECT City, Name FROM (
  SELECT City, ROW_NUMBER() OVER() pos 
  FROM `project.dataset.tableA` LIMIT 1000
) a JOIN (
  SELECT Name, ROW_NUMBER() OVER() pos 
  FROM `project.dataset.tableB` LIMIT 1000
) b USING(pos)  

Если применить к образцу данных в вашем вопросе, как в примере ниже

#standardSQL
WITH `project.dataset.tableA` AS (
  SELECT 'Torrance' City UNION ALL
  SELECT 'San Carlos' UNION ALL
  SELECT 'San Jose' UNION ALL
  SELECT 'Walnut Creek' UNION ALL
  SELECT 'Carmichael' UNION ALL
  SELECT 'Anderson' UNION ALL
  SELECT 'Altadena' UNION ALL
  SELECT 'Orange' UNION ALL
  SELECT 'Palos Verdes Estates' 
), `project.dataset.tableB` AS (
  SELECT 'Merrill' Name UNION ALL
  SELECT 'Elm' UNION ALL
  SELECT 'Blossom Hill' UNION ALL
  SELECT 'Brandywine' UNION ALL
  SELECT 'Altamont' UNION ALL
  SELECT 'Hill' UNION ALL
  SELECT 'Wapello' UNION ALL
  SELECT 'Palmyra' UNION ALL
  SELECT 'Via Almar' 
)
SELECT City, Name FROM (
  SELECT City, ROW_NUMBER() OVER() pos 
  FROM `project.dataset.tableA` LIMIT 1000
) a JOIN (
  SELECT Name, ROW_NUMBER() OVER() pos 
  FROM `project.dataset.tableB` LIMIT 1000
) b USING(pos)   

результат

Row City                    Name     
1   Torrance                Merrill  
2   San Carlos              Elm  
3   San Jose                Blossom Hill     
4   Walnut Creek            Brandywine   
5   Carmichael              Altamont     
6   Anderson                Hill     
7   Altadena                Wapello  
8   Orange                  Palmyra  
9   Palos Verdes Estates    Via Almar   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...