Sql server T-SQL-如何获取行中的数据以在列中显示
我有一个记录集,其中一行包含课程出勤数据,我希望根据课程代码中的最后一个字母将其显示在列中,但尚未找到相应的方法 课程代码文件包含城市,后面是序列号,表示模块的顺序。A必须先跟B,然后是C等 数据如下所示: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
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-哇!这看起来确实是我需要的。我将进行一些验证,以确认我得到了正确的值。