Как построить результат вложенной структуры из запроса на соединение SQL - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть таблицы Employee и Employee Detail в BigQuery.Соединяя эти две таблицы с помощью SQL-запросов, я хочу, чтобы результирующий набор, такой как вложенная структура, EmployeeName и EmployeeDetails был бы в одной строке.

Не могли бы вы дать некоторую идею для построения этой вложенной структуры с помощью запроса.Приведенный ниже запрос необходимо изменить с помощью результата вложенной структуры.

select EmployeeName, EmployeeDetail1, EmployeeDetail2 from Table1 t1, Table2 t2 where t1.Id = t2.Id
GROUP BY EmployeeName, EmployeeDetail1, EmployeeDetail2

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT EmployeeName, ARRAY_AGG(STRUCT(EmployeeDetail1, EmployeeDetail2)) EmployeeDetails
FROM `project.dataset.Employee` t1
LEFT JOIN `project.dataset.Details` t2 
USING(Id)
GROUP BY EmployeeName

Вы можете тестировать, играть с выше, используя [полностью] фиктивные данные, как в примере ниже

#standardSQL
WITH `project.dataset.Employee` AS (
  SELECT 1 AS id, 1 AS EmployeeName UNION ALL
  SELECT 2, 2 UNION ALL
  SELECT 3, 3 
), `project.dataset.Details` AS (
  SELECT 1 AS id, 11 AS EmployeeDetail1, 12 EmployeeDetail2 UNION ALL
  SELECT 1, 21, 22 UNION ALL
  SELECT 3, 211, 221 UNION ALL
  SELECT 3, 212, 222 UNION ALL
  SELECT 3, 31, NULL 
)
SELECT EmployeeName, ARRAY_AGG(STRUCT(EmployeeDetail1, EmployeeDetail2)) EmployeeDetails
FROM `project.dataset.Employee` t1
LEFT JOIN `project.dataset.Details` t2 
USING(Id)
GROUP BY EmployeeName   

с результатом

enter image description here

0 голосов
/ 13 февраля 2019

Я думаю, это будет

select EmployeeName, ARRAY_AGG(struct(EmployeeDetail1, EmployeeDetail2)) from Table1 t1, Table2 t2 where t1.Id = t2.Id
GROUP BY EmployeeName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...