我希望将多行合并为具有匹配ID的一行。我正在使用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
这甚至可能吗?这将极大地帮助我..!预先感谢!
编辑此ID的子类型并不总是具有全部3个子类型。这使它更加棘手。例如,ID:99999999只能具有子类型:“ AAA”,“ BBB”,但应为所有“ CCC”值返回空值,因为它不存在。
答案 0 :(得分:1)
我相信这会起作用(我在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