You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:02