我正在使用SQL Server。
我有一张像这样的学生表:
StudentID TeacherNumber
123 1
124 1
125 2
126 2
127 1
128 3
我还有一个像这样的老师桌:
TeacherNumber TeacherName
1 Adams
2 Johnson
3 Marks
我需要输出如下:
TeacherNumber Teacher Students
1 Adams 123|124|127
2 Johnson 125|126
3 Marks 128
感谢您的帮助。谢谢。
我之前发过一个类似的问题,并得到了一个有效的回复:
How to generate sql output as piped
现在我添加了另一张桌子,我遇到了麻烦。我很感激帮助。
答案 0 :(得分:2)
<强>小提琴:强>
http://sqlfiddle.com/#!6/27600/29/0
<强>查询:强>
select distinct st1.teachernumber,
teachername as teacher,
stuff(( select '|' + cast(st2.studentid as varchar(20))
from students st2
where st1.teachernumber = st2.teachernumber
order by st2.studentid
for xml path('')
),1,1,'') as students
from students st1
join teachers t
on st1.teachernumber = t.teachernumber
我必须将STUDENTID转换为VARCHAR的原因是因为通过添加管道字符,数据类型将不再有效并且您收到错误。你必须将其转换为varchar以使管道定界符与整数字段一起使用(我假设STUDENTID是一个INT字段)。
<强>输出:强>
| TEACHERNUMBER | TEACHER | STUDENTS |
|---------------|---------|-------------|
| 1 | Adams | 123|124|127 |
| 2 | Johnson | 125|126 |
| 3 | Marks | 128 |