0

我有两个表LecturerStudent我想在新列中显示其他讲师 ID,并用逗号分隔值。我正在使用 SQL Server 2014。

表:讲师

id     name     subject   
-------------------------------
102    Mark     Designing  
103    John     Analytics   
104    Jacob    Science     

表:学生讲师

id     Fname    Lname       Lid
--------------------------------
1      Jack     P           102
1      Jack     P           103
1      Jack     P           104

通过使用 group by 我得到一个值,如下所示:

SELECT  id, fname, lname, lid 
FROM studentlecturer 
GROUP BY id

表:学生讲师

    id     Fname    Lname       Lid
    --------------------------------
    1      Jack     P           102

预期结果

id     Fname    Lname       Lid      Concat Values
---------------------------------------------------
1      Jack     P           102      103,104
1      Jack     P           103      102,104
1      Jack     P           104      102,103

SQL 小提琴:http ://sqlfiddle.com/#!7/73304

4

2 回答 2

2

这可以使用For XML Path("), TYPE如下方式完成:

SELECT S.id, S.Fname, S.Lname, S.Lid, 
       STUFF((SELECT Concat(',',Lid) FROM StudentLecturer WHERE id=S.id And Lid<>S.Lid
       FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,1,'') AS [Concat Values]  
FROM StudentLecturer As S 

使用String_AggSQL Server 2017 (14.x) 及更高版本的功能。

SELECT S.id, S.Fname, S.Lname, S.Lid, 
       STRING_AGG(S_1.Lid, ',') WITHIN GROUP (ORDER BY S_1.Lid) AS [Concat Values]  
FROM StudentLecturer AS S LEFT JOIN StudentLecturer AS S_1 ON (S.id=S_1.id AND
                                                               S.Lid<>S_1.Lid)
GROUP BY S.id, S.Fname, S.Lname, S.Lid
ORDER BY S.Fname, S.Lname, S.Lid
于 2021-12-04T23:07:16.587 回答
1

您可以利用for xml它来汇总您的值。Stuff删除初始逗号。

select * 
from StudentLecturer s
outer apply (
    select ConcatValues=Stuff((select ',' + Cast(l.Id as varchar(10))
    from Lecturer l where l.id != s.Lid
    for xml path('')),1,1,'')
)l

工作小提琴

于 2021-12-04T22:54:15.967 回答