Как работать с SAFE_ORDINAL в большом запросе - PullRequest
0 голосов
/ 02 октября 2018

ОБНОВЛЕНО .... ВНОВЬ ПЫТАЕТСЯ:

Я работаю с этим запросом:

Select FirstName, LastName, MiddleName, Gender, Age, DOB, Address, Address2, City, State, Zip, Zip4, TimeZone, Income, HomeValue, Networth, MaritalStatus, IsRenter, HasChildren, CreditRating, Investor, LinesOfCredit, InvestorRealEstate, Traveler, Pets, MailResponder, Charitable, PolicalDonations, PoliticalParty, Attom_ID, GEOID, Score, Score1, Score2, Score3, Score4, Score5, Latitude, Longitude, Email[SAFE_ORDINAL(1)] Email1, Email[SAFE_ORDINAL(2)] Email2, Email[SAFE_ORDINAL(3)] Email3
from (

Select
  P.FirstName, P.LastName, MiddleName, Gender, Age, DOB, P.Address, Address2, P.City, P.State, P.Zip, Zip4, TimeZone, Income, HomeValue, Networth, MaritalStatus, IsRenter, HasChildren, CreditRating, Investor, LinesOfCredit, InvestorRealEstate, Traveler, Pets, MailResponder, Charitable, PolicalDonations, PoliticalParty, Attom_ID, GEOID, Score, Score1, Score2, Score3, Score4, Score5, Latitude, Longitude, E.Email
from `mother-216719.People.PEOPLE` P
join `mother-216719.People.EMAIL_STAGE` E on 
  P.FirstName = E.FirstName
  and P.LastName = E.LastName
  and P.Address = E.Address
  and P.Zip = E.Zip
 ) a

Это прямое соединение между людьми и EMAIL_STAGE.ВСЕ ПОЛЯ, которые P.* и без псевдонима, поступают из PEOPLE, а EMAIL - из EMAIL_STAGE в виде строки.

Таблица EMAIL_STAGE имеет имя, фамилию, адрес, город, штат, почтовый индекс и EMAIL.Эти семь полей одни.В таблице PEOPLE есть другие поля, а некоторые другие не нужны.

Я присоединяюсь к электронной почте, чтобы прикреплять электронные письма к PEOPLE посредством сопоставления адресов.Ключевым моментом здесь является то, что это отношение «один ко многим», и PEOPLE может быть много писем. Я хочу добавить EMAIL1, EMAIL2, EMAIL3 в PEOPLE.Я хочу, чтобы электронные письма приходили от EMAIL_STAGE "один-ко-многим" от PEOPLE.

Моя первая рекомендация состояла в том, чтобы выполнить маневр, подобный PIVOT, с использованием NTH (), но затем мне сказали, что SAFE_ORDINAL [] - это термин SQL Standard-version, который я хотел.Вышеупомянутый запрос был результатом, и ошибка структуры в запросе - это проблема, которую я пытаюсь достичь.

Из объединения как PIVOT первых трех найденных электронных писем (заказ не выдерживает) и помещать их в EMAIL1, EMAIL2, EMAIL3?

Спасибо.

ОБНОВЛЕНО # 2.

Пример набора данных из таблицы STAGE_EMAIL:

FirstName | LastName | Адрес | Город | Штат | Почтовый индекс | Электронная почта

Jael| Бэрд | 616 пр. Лобортис | Мелипилла | Метрополитан-де-Сантьяго.org Lacota | Head | PO Box 161, 7347 Elit St. | Coutisse | NA | E5R 7B5|metus.vitae@egestasa.com Victor | Hensley | 398-3949 Eget, St. | Лагос | Лагос | LI8 2ND | rhoncus.Proin@Phasellus.org

1 Ответ

0 голосов
/ 02 октября 2018

Ниже приведено для BigQuery Standard SQL

#standardSQL
SELECT FirstName, LastName, MiddleName, Gender, Age, DOB, Address, Address2, City, State, Zip, Zip4, TimeZone, Income, HomeValue, Networth, MaritalStatus, IsRenter, HasChildren, CreditRating, Investor, LinesOfCredit, InvestorRealEstate, Traveler, Pets, MailResponder, Charitable, PolicalDonations, PoliticalParty, Attom_ID, GEOID, Score, Score1, Score2, Score3, Score4, Score5, Latitude, Longitude, 
  Emails[SAFE_ORDINAL(1)] Email1, Emails[SAFE_ORDINAL(2)] Email2, Emails[SAFE_ORDINAL(3)] Email3
FROM (
  SELECT
    P.FirstName, P.LastName, MiddleName, Gender, Age, DOB, P.Address, Address2, P.City, P.State, P.Zip, Zip4, TimeZone, Income, HomeValue, Networth, MaritalStatus, IsRenter, HasChildren, CreditRating, Investor, LinesOfCredit, InvestorRealEstate, Traveler, Pets, MailResponder, Charitable, PolicalDonations, PoliticalParty, Attom_ID, GEOID, Score, Score1, Score2, Score3, Score4, Score5, Latitude, Longitude, E.Email
  FROM `mother-216719.People.PEOPLE` P
  JOIN (
    SELECT FirstName, LastName, Address, Zip, ARRAY_AGG(Email) Emails
    FROM `mother-216719.People.EMAIL_STAGE`
    GROUP BY FirstName, LastName, Address, Zip
  ) E 
  ON P.FirstName = E.FirstName
  AND P.LastName = E.LastName
  AND P.Address = E.Address
  AND P.Zip = E.Zip
) a

Примечание: не тестировалось, поэтому сообщите, если проблема все еще существует;Кроме того, подвыбор для E потенциально может быть настроен на любые поля, которые вам нужно выбрать из EMAIL_STAGE - я оставляю это вам для заполнения при необходимости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...