我对SQL比较陌生。我目前有以下CoursesTbl
StudentName CourseID InstructorName
Harry Potter 180 John Wayne
Harry Potter 181 Tiffany Williams
John Williams 180 Robert Smith
John Williams 181 Bob Adams
现在我真正想要的是:
StudentName Course1(180) Course2(181)
Harry Potter John Wayne Tiffany Williams
John Williams Robert Smith Bob Adams
我尝试过这个问题:
Select StudentName, Min(InstructorName) as Course1, Max(InstructorName) as
Course2 from CoursesTbl
Group By StudentName
现在我很清楚我需要按学生姓名分组。但是使用Min和Max会弄乱教练的命令。
即。哈利的最小值是约翰韦恩,马克斯是蒂芙尼威廉姆斯 约翰威廉姆斯的分钟是鲍勃亚当斯,马克斯是罗伯特史密斯。
因此它不会以正确的顺序显示教师。
有人可以建议如何解决这个问题吗?
答案 0 :(得分:4)
您可以将带有CASE语句的条件聚合与聚合函数一起使用,以将数据存储到列中:
select
[StudentName],
Course1 = max(case when CourseId = 180 then InstructorName end),
Course2 = max(case when CourseId = 181 then InstructorName end)
from #Table1
group by StudentName
见Demo。您还可以使用PIVOT函数来获得结果:
select
StudentName,
Course1 = [180],
Course2 = [181]
from
(
select StudentName,
CourseId,
InstructorName
from #Table1
) d
pivot
(
max(InstructorName)
for CourseId in ([180], [181])
) piv
另一个Demo。