1

重複の可能性:
Microsoft SQL Server 2005 で group_concat MySQL 関数をシミュレートしていますか?

私はこの

クラステーブルのような2つのテーブルを持っています:
ここに画像の説明を入力

学生テーブル:
ここに画像の説明を入力

2 つのテーブルに参加したいが、次のような結果が欲しい
ClsName StdName
A George
B Jenifer,Anjel,Alex
C Alex,Joe,Michael


どうすればこれを達成できますか?
実際、クラスごとに、生徒の名前が異なる1つの行が必要です

4

2 に答える 2

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

結果:

ClassName | Names
A         | George
B         | Alex, Anjel, Jenifer
C         | Alex, Joe, Micheal

私が使用した作業クエリは次のとおりです。

;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
于 2013-01-03T15:34:15.697 に答える
1

これを試すことができます:

SELECT 
    distinct
    S.Classid,
    (
        SELECT name + ','
        FROM Student S2
        WHERE S2.Classid = S.Classid
        FOR XML PATH('')
    ) StdName,
    C.name ClsName
FROM 
Student S INNER JOIN Class C
ON S.Classid = C.id
于 2013-01-03T15:33:15.133 に答える