Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于唯一id将多行连接到逗号分隔的列表中_Sql_Tsql_Concatenation_String Aggregation - Fatal编程技术网

Sql 基于唯一id将多行连接到逗号分隔的列表中

Sql 基于唯一id将多行连接到逗号分隔的列表中,sql,tsql,concatenation,string-aggregation,Sql,Tsql,Concatenation,String Aggregation,我是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 我

我是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都有一个逗号分隔的列表)

我一直在试着从其他问题中找出一些答案,但没有任何运气。我确信这是我经验不足的综合结果&我在这方面发现的所有其他问题都只是一张表的结果。我的查询是从多个表中获取结果,如果这有区别,将类似于

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

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

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