作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不是 SQL 专家。我正在使用 SQL Server 2005,我正在尝试弄清楚如何构造一个查询,以便它可以满足多种要求。我有两个表定义如下:
Classroom
- ID
- DepartmentID
- TeacherName
- RoomNumber
Student
- ID
- Name
- ClassroomID
我正在尝试构建一个查询,“给我部门 [x] 或部门 [y] 中超过 30 名学生的教室,并给我部门 [w] 或部门 [z] 中的教室有超过 40 名学生。我对如何在我的 SQL 中正确混合 AND 和 OR 感到困惑。目前,我正在尝试以下操作:
SELECT
c.RoomNumber,
c.TeacherName
FROM
Classroom c
WHERE
c.[DepartmentID]=5 AND (SELECT COUNT(*) FROM Student s WHERE s.ClassroomID=c.ID > 30) OR
c.[DepartmentID]=6 AND (SELECT COUNT(*) FROM Student s WHERE s.ClassroomID=c.ID > 30) OR
c.[DepartmentID]=7 AND (SELECT COUNT(*) FROM Student s WHERE s.ClassroomID=c.ID > 40) OR
c.[DepartmentID]=8 AND (SELECT COUNT(*) FROM Student s WHERE s.ClassroomID=c.ID > 40)
我做错了什么?谢谢!
最佳答案
SELECT c.id
FROM Classroom c
JOIN Students s
ON s.Classroom = c.Id
WHERE DepartmentID IN ('X', 'Y', 'W', 'Z')
GROUP BY
c.id, c.DepartmentID
HAVING COUNT(*) >= CASE WHEN DepartmentID IN ('X', 'Y') THEN 30 ELSE 40 END
关于SQL - 混合 AND 和 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327803/
我是一名优秀的程序员,十分优秀!