首页 > 解决方案 > 如何在 SQL Server 中连接字符串,并按不同的列排序/排序?

问题描述

我在 SQL Server 中看到了许多连接字符串的示例,但如果他们担心排序,则总是通过连接的列。我需要根据不同字段中的数据对值进行排序。

样品表:

ClassID | StudentName   | SortOrder
-----------------------------
A       |James          |1
A       |Janice         |3
A       |Leonard        |2
B       |Luke           |2
B       |Leia           |1
B       |Artoo          |3

我想得到的结果是:

ClassID |StudentName
--------------------------------
A       |James, Leonard, Janice
B       |Leia, Luke, Artoo

这如何在 SQL Server 2016 中完成?(我很期待 2017 年的 STRING_AGG,但我们还没有……)

谢谢!

标签: sqlsql-serverconcatenation

解决方案


干得好:

SELECT
     s1.ClassID
   , STUFF((SELECT
                  ',' + s2.StudentName
            FROM  dbo.Student AS s2
            WHERE s1.classID = s2.ClassID
            ORDER BY s2.SortOrder
           FOR XML PATH('')), 1, 1, '') AS StudentNames
FROM dbo.Student AS s1
GROUP BY s1.ClassID

推荐阅读