如何使用具有多个表的管道生成SQL输出

时间:2014-08-25 03:21:18

标签: sql sql-server

我正在使用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

现在我添加了另一张桌子,我遇到了麻烦。我很感激帮助。

1 个答案:

答案 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 |