Объединить несколько строк (с одинаковым идентификатором) в одну? - PullRequest
0 голосов
/ 23 января 2020

Я хочу объединить несколько строк в одну строку с соответствующими идентификаторами. Я использую Teradata SQL. Пример:

  SELECT
  id_nbr AS ID,
  contact_type AS contype,
  contact_first_name AS firstName,
  contact_last_name AS lastName,
  contact_phone_number AS phoneNumber,
  contact_address AS address,
  contact_email AS email
  FROM database.account_info
  WHERE (contact_type = 'AAA' OR contact_type = 'BBB' OR contact_type = 'CCC');

Результат:

ID          contype     firstName     lastName    phoneNumber     address        email
111111111   AAA         bob           smith       (999)999-9999   1 Main St      null
111111111   BBB         bob           smith       (888)888-8888   1 random rd    bob@random.com
111111111   CCC         bob           smith       null            null           bob@anotherrandom.com

Что я хочу:

ID          contypeAAA     firstNameAAA     lastNameAAA    phoneNumberAAA     addressAAA      emailAAA   contypeBBB  firstNameBBB     lastNameBBB    phoneNumberBBB     addressBBB      emailBBB  contypeCCC     firstNameCCC     lastNameCCC    phoneNumberCCC     addressCCC      emailCCC
111111111   AAA            bob              smith          (999)999-9999      1 Main St       null ......etc

Возможно ли это вообще? Это очень помогло бы мне! Заранее спасибо!

Редактируя это, contype для ID не всегда имеет все 3 contypes. Это делает это сложнее. Например, ID: 99999999 может иметь тип: «AAA», только «BBB», но должен возвращать нулевые значения для всех значений «CCC», поскольку он не существует.

1 Ответ

1 голос
/ 24 января 2020

Я полагаю, что это будет работать (я проверял это на Oracle 11g, а не на Teradata):

SELECT *
  FROM (SELECT id_nbr AS ID,
               contact_type AS contype,
               contact_first_name AS firstName,
               contact_last_name AS lastName,
               contact_phone_number AS phoneNumber,
               contact_address AS address,
               contact_email AS email
          FROM database.account_info
         WHERE contact_type in ('AAA', 'BBB', 'CCC')
        )
 PIVOT (max(firstName) AS firstName,
        max(lastName) AS lastName,
        max(phoneNumber) AS phone,
        max(email) AS email,
        max(address) AS address
   FOR contype IN ('AAA', 'BBB', 'CCC')
        )

В последней строке может потребоваться псевдоним, один из:

        ) AS derived_pivot
        ) derived_pivot
...