SQL Server 2017中如何让string_agg()仅返回不重复的唯一值
原因
SQL Server 2017 版本的STRING_AGG函数不支持直接传入DISTINCT去重参数,该语法特性从 SQL Server 2022 版本才开始提供,因此你直接在STRING_AGG内加DISTINCT会触发语法错误。
解决方案
你可以先对同一电脑下重复的硬盘接口类型做去重,再执行拼接聚合,以下是两种可直接运行的实现方式:
方式1:子查询去重
SELECT c.Id AS computer_id, STRING_AGG(CAST(hd_unique.Interface AS NVARCHAR(MAX)), ' ') AS hard_disk_interfaces FROM Computer c LEFT JOIN ( -- 先按ComputerId去重同设备下的重复接口 SELECT DISTINCT ComputerId, Interface FROM HardDisk ) hd_unique ON c.Id = hd_unique.ComputerId GROUP BY c.Id;
方式2:CTE写法(可读性更高)
WITH DistinctHardDisk AS ( SELECT DISTINCT ComputerId, Interface FROM HardDisk ) SELECT c.Id AS computer_id, STRING_AGG(CAST(d.Interface AS NVARCHAR(MAX)), ' ') AS hard_disk_interfaces FROM Computer c LEFT JOIN DistinctHardDisk d ON c.Id = d.ComputerId GROUP BY c.Id;
两种写法均兼容SQL Server 2017版本,执行后即可得到你预期的去重拼接结果。
内容的提问来源于stack exchange,提问作者J86
相关产品推荐
相关产品推荐

