使用“OR”与“AND”运算符获取特定结果

时间:2013-05-21 19:47:46

标签: sql-server-2008

我会尽力在这里解释我的问题。我运行了一个查询,该查询适用于检查已在courseIDNum=11中完成courseIDNum=12districtIDNum=5的人员,但不能同时检查两个课程IDNums。这是脚本:

SELECT max(p.FirstName),
   max(p.LastName),
   max(p.Email),
   max(s.CourseIDNum)
FROM People p
INNER JOIN Registration r
   on p.PeopleID = r.PeopleIdNum
INNER JOIN Section s
   on r.SectionIDNum = s.SectionID
INNER JOIN School sc
   on p.SchoolIDNum = sc.SchoolID
WHERE s.CourseIDNum IN (11, 12)
AND sc.DistrictIDNum = 5
AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=1

现在我的任务是再次为districtIDNum=5中的人检索数据,但这次要检查他们是否已经完成了所有3门课程,其中3门课程中有2门的课程名称相同/ strong>但是这两门课程中的每一门都有2个不同的课程IDNums。所以,我编辑了下面显示的WHERE部分。返回的结果仅为完成12177的人,1168128没有结果。然后,我将 OR 替换为 AND 运算符,并返回 0行。非常感谢任何帮助!

WHERE s.CourseIDNum IN (11, 12)
   OR s.CourseIDNum IN (68, 177)
   OR s.CourseIDNum=128
   AND sc.DistrictIDNum = 5
   AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=3

以下是涉及的表格:

的peopleid名姓电子邮件schoolIDNum
1埃丝特乙b@hotmail.com 33
2托米大号l@hotmail.com 55
3利兹中号m@hotmail.com 90

registrationID peopleIDNum sectionIDNum
22个1 40
23个2 41
24个3 132
25个1 78
26个2 52
27 1 63

sectionID courseIDNum
40个11
41个12
52个68
63个128
78个177
132 195

courseID coursename
11健康(旧)
12健康(新)
68 PE(旧)
128键盘输入
177 PE(新)
195计算

schoolID districtIDNum
33个5
55个5
90 12

0 个答案:

没有答案