首页 >数据库 >mysql教程 >如何在 SQL Server 中使用 STRING_AGG 获取不同的值?

如何在 SQL Server 中使用 STRING_AGG 获取不同的值?

DDD
DDD原创
2025-01-03 19:52:40224浏览

How to Get Distinct Values Using STRING_AGG in SQL Server?

在 SQL Server 中使用 STRING_AGG 的不同值

SQL Server 2017 中的 STRING_AGG 函数允许您将值连接到单个字符串中。但是,当连接多次出现的字段时,它可能会返回重复值。

考虑以下查询:

SELECT 
    ProjectID,
    STRING_AGG( newID.value, ',') WITHIN GROUP (ORDER BY newID.value) AS NewField
FROM
    [dbo].[Data] WITH(NOLOCK)  
CROSS APPLY 
    STRING_SPLIT([bID],';') AS newID  
WHERE 
    newID.value IN ('O95833', 'Q96NY7-2')  
GROUP BY 
    ProjectID
ORDER BY 
    ProjectID

此查询返回连接的值,但包含重复值:

ProjectID NewField
2 O95833,O95833,O95833,Q96NY7-2,Q96NY7-2,Q96NY7-2
4 Q96NY7-2,Q96NY7-2

要仅检索唯一值,请在子查询:

SELECT 
 ProjectID
,STRING_AGG(value, ',') WITHIN GROUP (ORDER BY value) AS 
NewField
FROM (
    SELECT DISTINCT 
      ProjectID
    , newId.value 
    FROM [dbo].[Data] WITH (NOLOCK)  
    CROSS APPLY STRING_SPLIT([bID],';') AS newId  
    WHERE newId.value IN (   'O95833' , 'Q96NY7-2'  )  
) x
GROUP BY ProjectID
ORDER BY ProjectID

此子查询在应用 STRING_AGG 函数之前删除重复项。最终结果是:

ProjectID NewField
2 O95833, Q96NY7-2
4 Q96NY7-2

以上是如何在 SQL Server 中使用 STRING_AGG 获取不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn