Sql 一行中的一对多结果(例如电子邮件)
我在多个表中基本上有以下数据:Sql 一行中的一对多结果(例如电子邮件),sql,pivot,Sql,Pivot,我在多个表中基本上有以下数据: ID Name Email 1 Jack jack@hotmail.com 1 Jack jack@gmail.com 2 Jill jill@home.net 2 Jill jill@mail.com 2 Jill jill@gmail.com 我如何进行一个简单的SQL查询,以便在一行中为每个唯一的ID获取以下结果,如下所示 ID Name Email1
ID Name Email
1 Jack jack@hotmail.com
1 Jack jack@gmail.com
2 Jill jill@home.net
2 Jill jill@mail.com
2 Jill jill@gmail.com
我如何进行一个简单的SQL查询,以便在一行中为每个唯一的ID获取以下结果,如下所示
ID Name Email1 Email2 Email3
1 Jack jack@hotmail.com jack@gmail.com
2 Jill jill@home.net jill@mail.com jill@gmail.com
感谢您的帮助。您可以使用带有
行号()的条件聚合来枚举电子邮件:
select id, name,
max(case when seqnum = 1 then email end) as email1,
max(case when seqnum = 2 then email end) as email2,
max(case when seqnum = 3 then email end) as email3
from (select t.*,
row_number() over (partition by id order by email) as seqnum
from t
) t
group by id, name;
如果实际上不需要为每封电子邮件增加列,但希望每个ID/名称有一行,则可以使用for XML PATH连接。这会将所有电子邮件添加到同一列中。如果他们有一封电子邮件,该字段将只显示一封。如果他们有7封电子邮件,它将在一个字段中显示所有7封电子邮件
SELECT
ID, Name,
Emails = STUFF((SELECT ',' + Email
FROM [EmailTable] u2
WHERE u.ID = u2.ID
FOR XML PATH('')), 1, 1,'')
FROM [EmailTable] u
group by ID, Name
您使用的是哪种数据库管理系统?如果有人添加了第四封吉尔电子邮件,您是否突然想要在结果中添加Email4列?您如何知道jill@home.net
是否属于Email1?为什么它没有出现在Email3中,带有jill@gmail.com
是否在Email1中?