Sql server 2008 SQL查询返回所有地区的结果,但我只需要显示一个地区

Sql server 2008 SQL查询返回所有地区的结果,但我只需要显示一个地区,sql-server-2008,asp-classic,Sql Server 2008,Asp Classic,我正在尝试获取districtIDNum=5中已完成courseIDNum=11或courseIDNum=12的人员的数据,但不能同时完成这两项工作 但是,在我执行查询之后,它返回了ALLdistricts。我做错了什么?请帮忙,提前谢谢 SELECT p.FirstName, p.LastName, p.Email, s.CourseIDNum FROM People p INNER JOIN Registration r on p.PeopleID = r.PeopleIdNum INNE

我正在尝试获取
districtIDNum=5
中已完成
courseIDNum=11
courseIDNum=12
的人员的数据,但不能同时完成这两项工作

但是,在我执行查询之后,它返回了ALLdistricts。我做错了什么?请帮忙,提前谢谢

SELECT p.FirstName, p.LastName, p.Email, 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=11 AND s.CourseIDNum!=12)
  OR (s.CourseIDNum!=11 AND s.CourseIDNum=12)
  AND s.DistrictIDNum=5
  AND r.Completed='Y'
以下是相关表格:

peopleIDFirstNameLastNameEmailschoolIDNum
1EstherBb@hotmail.com33
2TommyLl@hotmail.com55

registrationIDpeopleIDNumsectionIDNum
22140
23241

SectionIDCourseIDNumDistricIDNum
40115
41125

SchoolIDDistrictionIDnum
335

555

要仅返回参加一个或另一个课程但不同时参加两个课程的人,请尝试:

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 s.DistrictIDNum = 5
   AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=1

SQLFiddle.

为什么同时有
s.CourseIDNum=11和s.CourseIDNum=12
s.CourseIDNum=11和s.CourseInum=12
?看起来可能是
(s.CourseIDNum=11或s.CourseIDNum=12)
@David,谢谢您的编辑。你能告诉我如何让我未来的脚本看起来像你所做的编辑吗?谢谢。代码应该缩进4个空格<代码>内联代码可以通过反勾号(按~键)实现。如果需要,您可以单击“编辑”来查看我做了什么。@David-当我放置(s.CourseIDNum=11或s.CourseIDNum=12)时,两个CourseIDNum都会显示出来,我只需要知道人们是否选择了其中一个,而不是两个。将文本格式化为代码的一种快速方法是将其高亮显示,然后单击
{
编辑框正上方的控件。但问题是“我只需要显示一个地区”,并且
s.DistrictIDNum=5
在OP查询中。为什么你的有效而他们的无效?我运行了这个查询,它返回0行。@Esther:你能给你的问题添加一些示例数据吗?你确定在5区有人完成了一门或另一门课程,但不是两门都完成了吗?如果删除
having
子句,会发生什么情况?@DavidStarkey:was,过去时-小博比·泰尔斯的回答是正确的,直到增加了附加要求(只返回修过一门或另一门课程的人,但不返回两门课程的人)。据我所知,问题仍然是“我只需要一个地区出现”OP查询继续包含
s.DistrictIDNum=5
。这个问题听起来更像是返回记录的查询,其中
s.DistrictIDNum=5
s.CourseIDNum=11 XOR s.CourseIDNum=12