SQL返回的行包含一个字段的相同数据但其他字段包含不同的数据

时间:2012-04-17 03:47:49

标签: sql group-by distinct

我正在尝试编写一个SQL语句来查找表中的所有行,对于一个字段,它包含相同的值。但是,我只想返回具有不同值的行作为单独的属性。这有点难以解释。

我有一个表格的教师:

TeacherName varchar(50)
CourseN     int
Quarter     varchar(50)

三个字段组合构成了主键,因此只要四分之一不同,同一个教师就可以教同一个课程。我试图解决的问题是,如何返回至少教授两门不同课程(不论季度)的所有教师的(不同)名称?

这是一个实验室,我一直试图解决这个问题大约一个星期,我只是想不通,所以我想我会来这里。上一个问题要求找到至少两次教授相同课程的教师名单。我想出了这个:

SELECT DISTINCT [TeacherName] 
FROM            [Teacher]
GROUP BY        [TeacherName], 
                [CourseN] 
HAVING   COUNT( [CourseN] ) >= 2

然而,我现在试图解决的问题是类似的,但同样,我只需要教师不止一次出现在教学中至少教授两门不同的课程。我也非常感谢一些指导,而不仅仅是答案,因为我非常了解数据库正在做什么。

1 个答案:

答案 0 :(得分:3)

在这种情况下,你应该能够获得不同的列表,而不必使用DISTINCT这个词,特别是如果它可以“不管季度”。从本质上讲,您只需要在子查询表中具有> = 2行的教师,每个独特的teacher-coursenumber组合具有1行。

select TeacherName
from (
    select TeacherName, CourseN
    from Teacher
    group by TeacherName, CourseN
    ) t1
group by TeacherName
having count(*) >=2