如何通过Sql Server将多行分组为一行

Beh*_*azi 1 sql-server grouping

可能的重复:
在 Microsoft SQL Server 2005 中模拟 group_concat MySQL 函数?

我有 2 张像这样的

班级表:
在此输入图像描述

学生表:
在此输入图像描述

我想加入两个表,但我想要像这样的结果
ClsName StdName
A George
B Jenifer,Anjel,Alex
C Alex,Joe,Michael


如何才能做到这一点?
事实上,对于每个班级,我希望有一排带有不同学生姓名的行

Tar*_*ryn 5

您应该能够使用以下内容:

select c.name ClassName,
    STUFF(( SELECT  distinct ', ' + s.name
            FROM    student s
            WHERE   c.id = s.classid
            FOR XML PATH('')
            ), 1, 2, '')  Names
from class c
Run Code Online (Sandbox Code Playgroud)

结果:

ClassName | Names
A         | George
B         | Alex, Anjel, Jenifer
C         | Alex, Joe, Micheal
Run Code Online (Sandbox Code Playgroud)

这是我使用的工作查询:

;with class(id, name) as
(
    select 1, 'A'
    union all
    select 2, 'B'
    union all
    select 3, 'C'
),
student(id, name, classid) as
(
    select 1, 'Alex', 3
    union all
    select 2, 'Alex', 3
    union all
    select 3, 'Alex', 3
    union all
    select 4, 'Joe', 3
    union all
    select 5, 'Micheal', 3
    union all
    select 6, 'Jenifer', 2
    union all
    select 7, 'Anjel', 2
    union all
    select 8, 'Alex', 2
    union all
    select 9, 'George', 1
)
select c.name,
    STUFF(( SELECT  distinct ', ' + s.name
            FROM    student s
            WHERE   c.id = s.classid
            FOR XML PATH('')
            ), 1, 2, '') Names
from class c
Run Code Online (Sandbox Code Playgroud)