如何解决具有重复 ID 的 SQL 行 - 如何将它们连接起来?
我有一些连接在一起的用户和部门表,但前端可以选择包含多个“领导”电子邮件地址。
理想情况下,我希望将这些分开放在主数据集中;但是,在报告视图中,我希望将它们全部合并。
数据目前的样子
ID | 姓名 |
---|---|
157 | 鲍勃 |
157 | 詹姆斯 |
300 | 菲尔 |
300 | 基思 |
300 | 保罗 |
我喜欢它的样子
ID | 姓名 |
---|---|
157 | 鲍勃,詹姆斯 |
300 | 菲尔、基思、保罗 |
或者在不同的列中,以最简单的为准。
当前代码类似于以下。
Select
TU.ID,TUbyDept.FirstName,TU.LastAccessData
FROM USERDATA UD
LEFT JOIN DepartmentData DD
ON UD.DepartmentID = DD.ID
LEFT JOIN UserData UDByDept ON DD.id = UDByDept.DepartmentID
任何帮助将不胜感激,因为到目前为止我尝试过的一切都不太顺利!
使用 SSMS 2016
解决方法
如果您的 SQL Server 早于 SQL Server 2017,那么这样的事情应该可以解决问题。
WITH userlist (ID,[Name])
AS (SELECT ID,[Name] FROM YourSourceTable)
SELECT ID,STUFF((SELECT [Name] + ','
FROM userlist
WHERE ID=users.ID
FOR XML PATH('')),1,2,'')
FROM userlist users
GROUP BY ID;
我使用了通用表表达式,因为我不确定您的原始未聚合/连接源代码是什么样的。因此,基本上只需将我的代码中的“SELECT ID,[Name] FROM YourSourceTable”替换为第一个表的实际源代码(“当前数据的外观”)。
使用 SQL Server 2017 及更高版本会更轻松,因为它们带有 STRING_AGG() 函数。 More on this on MSDN.
,可能有点骇人听闻,可能仅适用于较小的数据集:
declare @x as xml=(select id,[name] from userdata for xml raw);
with distinctusers as
(
select id from userdata group by id
)
select
d.id,x.t.query('row[@id=sql:column("id")]').query('distinct-values(row/@name)')
from distincusers d
outer apply @x.nodes('.') as x(t)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。