Sql 是否将多行(具有相同ID)合并为一行?

Sql 是否将多行(具有相同ID)合并为一行?,sql,teradata,Sql,Teradata,我希望将多行合并为一行,并具有匹配的ID。我正在使用Teradata SQL。 例如: 结果: ID contype firstName lastName phoneNumber address email 111111111 AAA bob smith (999)999-9999 1 Main St null 111111111 BBB bob

我希望将多行合并为一行,并具有匹配的ID。我正在使用Teradata SQL。 例如:

结果:

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
这可能吗?这对我会有很大的帮助。。!提前谢谢


编辑此内容时,ID的contype并不总是包含所有3个contype。这使得它变得更加棘手。例如,ID:99999999可以有contype:'AAA','BBB',但应该为所有'CCC'值返回空值,因为它不存在。

我相信这会起作用。我在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

最简单的方法是两个自联接。每个触点类型是否始终有行或始终存在的触点类型?每个ID不总是有一个触点类型,但最多可以有三个不同的TAAA、BBB、CCC。整个表中是否只有三个总电位值,每个id最多有三个?不,有8个,但如果每个id都有,我需要这3个。使用pivot,应该可以了。非常感谢您的回答:稍后我可以测试这个@JCP一旦您测试了SQL,请接受我的答案。当然,除非它不起作用。你只需要添加别名,Oracle支持省略它们,Standard/Teradata SQL不会:因为dtOracle会阻塞标准SQL的as,但列别名不会,只有Larry知道,为什么:-@Scratte谢谢!最终你的解决方案帮助我解决了我的问题。非常感谢您抽出时间:
        ) AS derived_pivot
        ) derived_pivot