gpt4 book ai didi

sql - 在 SQL Server 中使用 STRING_AGG 获取唯一值

转载 作者:行者123 更新时间:2023-12-02 12:19:16 25 4
gpt4 key购买 nike

以下查询返回如下所示的结果:

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

结果:

ProjectID   value
---------------------
2 Q96NY7-2
2 O95833
2 O95833
2 Q96NY7-2
2 O95833
2 Q96NY7-2
4 Q96NY7-2
4 Q96NY7-2

使用新添加的 STRING_AGG 函数(在 SQL Server 2017 中),如以下查询所示,我可以获得下面的结果集。

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

我希望我的最终输出仅包含以下唯一元素:

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

关于如何得到这个结果有什么建议吗?如果需要,请随时从头开始完善/重新设计我的查询。

最佳答案

在子查询中使用 DISTINCT 关键字在合并结果之前删除重复项:SQL Fiddle

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

关于sql - 在 SQL Server 中使用 STRING_AGG 获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com