【问题标题】:Concatenate many rows into comma-separated list based on unique id [duplicate]根据唯一ID将多行连接到逗号分隔的列表中[重复]
【发布时间】:2023-03-07 04:25:01
【问题描述】:

我是 SQL 新手(运行 SQL Server 2012),我正在运行的查询正在返回这些结果。

IDNum   Email
----------------
 1      a@a.com
 1      b@b.com
 1      c@c.com
 2      d@d.com
 2      e@e.com
 3      f@f.com
 3      g@g.com
 3      h@h.com
 4      i@i.com
 5      j@j.com
 5      k@k.com

我想得到以下结果集(每个 id 唯一的逗号分隔列表)

IDNum   Emails
---------------------------------
 1      a@a.com,b@b.com,c@c.com
 2      d@d.com,e@e.com
 3      f@f.com,g@g.com,h@h.com
 4      i@i.com
 5      j@j.com,k@k.com

我一直在尝试遵循其他问题的一些答案,但没有任何运气。我确信这是我缺乏经验的某种结合,我发现的所有其他问题都只是一张表的结果。我的查询正在从多个表中获取结果,如果这有所不同,将类似于

SELECT DISTINCT 
    s.idnum, e.email
FROM
    student s
JOIN 
    email e ON e.guid = s.guid
WHERE 
    s.activeYear = 1 AND e.activeEmail = 1

有人可以帮忙吗?谢谢。

******更新******

在这里和另一个网站上阅读了更多文章后,我最终使用了以下查询。希望这对将来的人有所帮助。

USE databaseName

SELECT s.idnum,
STUFF(( SELECT ',' + e.email AS [text()]
        FROM email e
        WHERE
        e.guid = s.guid AND e.activeEmail = 1
        FOR XML PATH('')
        ), 1, 1, '' )
        AS emails
    FROM student s

WHERE s.activeYear = 1

【问题讨论】:

    标签: sql tsql concatenation string-aggregation


    【解决方案1】:

    在 Oracle 中,您可以使用 LISTAGG 函数来执行此操作,但对于 SQL-Server,请尝试这个问题,那里有几个不同的选项:

    ListAGG in SQLSERVER

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多