SQL Server 2017实现重复Email对应Sr#填充至Duplicate#列
解决方案
在SQL Server 2017中,可以利用STRING_AGG函数结合自连接快速实现需求,具体查询语句如下:
SELECT t1.[Sr#], t1.Email, STRING_AGG(CAST(t2.[Sr#] AS VARCHAR(20)), ',') WITHIN GROUP (ORDER BY t2.[Sr#]) AS [Duplicate#] FROM YourTableName t1 LEFT JOIN YourTableName t2 ON t1.Email = t2.Email AND t1.[Sr#] != t2.[Sr#] GROUP BY t1.[Sr#], t1.Email;
关键说明:
- 把
YourTableName替换成你的实际数据表名称 STRING_AGG会将同一邮箱下的其他Sr#值用逗号分隔拼接成字符串CAST(t2.[Sr#] AS VARCHAR(20))用于将数字类型的Sr#转为字符串,避免拼接时出现类型错误WITHIN GROUP (ORDER BY t2.[Sr#])可让拼接的Sr#按顺序排列,不需要的话可以直接移除
如果需要兼容更早版本的SQL Server,也可以用关联子查询的方式实现:
SELECT [Sr#], Email, STUFF( ( SELECT ',' + CAST([Sr#] AS VARCHAR(20)) FROM YourTableName t2 WHERE t2.Email = t1.Email AND t2.[Sr#] != t1.[Sr#] FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '' ) AS [Duplicate#] FROM YourTableName t1;
内容的提问来源于stack exchange,提问作者zain ul abidin
相关产品推荐
相关产品推荐

