没有min和max

时间:2017-05-04 15:37:42

标签: sql sql-server group-by aggregate-functions

我对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会弄乱教练的命令。

即。哈利的最小值是约翰韦恩,马克斯是蒂芙尼威廉姆斯 约翰威廉姆斯的分钟是鲍勃亚当斯,马克斯是罗伯特史密斯。

因此它不会以正确的顺序显示教师。

有人可以建议如何解决这个问题吗?

1 个答案:

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