我如何 sql 透视列

How can i sql pivot column

我看过很多关于数据透视表的问题 tables.Even 如果他们不知道他们在问数据透视表,......


+---------+----------+----------+
| Subject | Semester | Attendee |
+---------+----------+----------+
| ITB001  |        1 | John     |
| ITB001  |        1 | Bob      |
| ITB001  |        1 | Mickey   |
| ITB001  |        2 | Jenny    |
| ITB001  |        2 | James    |
| MKB114  |        1 | John     |
| MKB114  |        1 | Erica    |
+---------+----------+----------+

至 像这样

+----------+----------+----------------+
| Attendee | Semester | Subject        |
+----------+----------+----------------+
| John     |        1 | ITB001,MKB114  |
| Bob      |        1 | ITB001         |
+----------+----------+----------------+

这根本不是一个数据透视表,它是字符串聚合。

在 SQL Server 2017+ 或 Azure SQL 数据库中:

SELECT Attendee, Semester, Subjects = STRING_AGG(Subject, ',')
  FROM dbo.SomeTableName
  GROUP BY Attendee, Semester;

在较旧和不受支持的版本上,它更丑陋得多,更不用说效率低下了:

SELECT ost.Attendee, ost.Semester, Subjects = STUFF((
  SELECT ',' + ist.Subject
    FROM dbo.SomeTableName AS ist
    WHERE ist.Attendee = ost.Attendee
      AND ist.Semester = ost.Semester
    FOR XML PATH(''), 
    TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 1, '')
FROM dbo.SomeTableName AS ost
GROUP BY ost.Attendee, ost.Semester;