Sql server T-SQL-如何获取行中的数据以在列中显示

Sql server T-SQL-如何获取行中的数据以在列中显示,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我有一个记录集,其中一行包含课程出勤数据,我希望根据课程代码中的最后一个字母将其显示在列中,但尚未找到相应的方法 课程代码文件包含城市,后面是序列号,表示模块的顺序。A必须先跟B,然后是C等 数据如下所示: Course_Code Student_ID MadridA 123 ParisB 123 NewYorkC 123 HamburgD 123 HamburgA 456 ParisB 456 HamburgC 456 Ham

我有一个记录集,其中一行包含课程出勤数据,我希望根据课程代码中的最后一个字母将其显示在列中,但尚未找到相应的方法

课程代码文件包含城市,后面是序列号,表示模块的顺序。A必须先跟B,然后是C等

数据如下所示:

Course_Code  Student_ID
MadridA      123
ParisB       123
NewYorkC     123
HamburgD     123
HamburgA     456
ParisB       456
HamburgC     456
HamburgD     456
HamburgA     789
ParisB       789
HamburgC     789
MadridD      789
我需要的结果是:

Student_ID CourseA  CourseB  CourseC  CourseD
123        MadridA  ParisB   NewYorkC HamburgD
456        HamburgA ParisB   HamburgC HamburgD
789        HamburgA ParisB   HamburgC MadridD
我一直在寻找PIVOT作为可能的解决方案,但找不到任何不涉及数据值总和或平均值的示例。我不需要更改数据,只需移动到适当的列即可


PIVOT是要做我需要的事情,还是我在一个错误的小溪里,桨断了?

您可以使用PIVOT函数来获得结果,但是您需要使用
max
min
聚合函数,因为您的数据是一个字符串

您应该能够使用以下各项:

select student_id,
  CourseA, CourseB, 
  CourseC, CourseD
from
(
  select course_code, student_id,
    -- append the course letter A, etc to Course to get the new column names
    col = 'Course'+right(course_code, 1)  
  from yourtable
) d
pivot
(
  max(course_code)
  for col in (CourseA, CourseB, CourseC, CourseD)
) piv;

参见

蓝脚,根据你名字旁边的钻石,我想选举进行得很顺利吧?:)@christiandev是的,我昨天当选:)恭喜,你还是得到了我的选票……惊讶地看到你回答了一个
Pivot
问题:)@christiandev我喜欢Pivot问题。@bluefeet-哇!这看起来确实是我需要的。我将进行一些验证,以确认我得到了正确的值。