当前位置: 首页 > 面试题库 >

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

澹台建华
2023-03-14
问题内容

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

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


 类似资料:
  • 问题内容: 我正在寻找一种在Java应用程序中获取唯一文件ID的方法,并且遇到了这种情况: Windows中的唯一文件标识符 现在,我尝试了Ashley Henderson本人(提出问题的人)提供的答案,并且在C#中效果很好。但是我需要在Java中执行此操作,以使该应用程序可以跨平台工作。 有什么方法可以将此移植到Java或以其他方式获取相同的ID? 编辑: 我现在几乎可以使用eee的解决方案来使

  • 问题内容: 我在一个基于Java的系统中工作,我需要为视觉显示中的某些元素设置一个ID。一类元素是字符串,因此我决定使用String.hashCode()方法来获取这些元素的唯一标识符。 但是,我遇到的问题是,如果id为负,并且经常返回负值,那么我正在borks中工作的系统。一种快速的解决方案是仅在哈希码调用周围使用Math.abs()来确保得到肯定的结果。我想知道这种方法是,两个不同的元素具有相

  • 问题内容: 如何获得数组中唯一值的列表?我是否总是必须使用第二个数组,或者是否有类似于JavaScript中Java哈希表的东西? 我将仅使用 JavaScript 和 jQuery 。不能使用其他库。 问题答案: 由于我在@Rocket答案的注释中继续进行了讨论,因此我不妨提供一个不使用任何库的示例。这需要两个新的原型函数,并且 为了提高可靠性,可以用MDN的垫片代替,并检查每个元素的值是否等于

  • 问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现

  • 问题内容: 我想创建一个(或一组)所有出现在python列表中的唯一值的列表。我有这样的事情: 我想要以下内容: 我知道对于字符串列表,您只能使用set(aList),但是我无法弄清楚如何在列表列表中解决此问题,因为set(aList)会向我显示错误消息 我该如何解决? 问题答案:

  • 我想获得跨多个数字id列的唯一数字id值列表。我的目标是帮助总结用户更改多个表时数据库中的更改流,在我的示例中,从表a到B,然后返回到a。 我知道我可以通过附加每个列的列表来实现这一点,但我想利用数据。表内部,以尽可能提高效率。 需要:矢量或数据。具有唯一值的表格,例如c(1,2,3,4)