Sql 根据条件选择单行或多行

Sql 根据条件选择单行或多行,sql,case,conditional,where,Sql,Case,Conditional,Where,我试图通过将学生的邮政编码加入地区邮政编码来识别学生的家乡地区。一个给定的地区可能会重叠几个邮政编码,因此学生可能会出现几个可能的家乡地区。例如,邮政编码99999可能包括休斯顿和苏格兰学区。当学生所在城市的名称与学区名称相同时,我可以将原籍学区缩小为单个记录,例如,如果学生所在城市是休斯顿,学区名称是休斯顿。在这种情况下,我只想找回休斯顿区,而不是休斯顿和苏格兰。但是,如果这个学生碰巧住在Bayou,邮政编码是99999,那么我想检索休斯顿和Sugarland两个地区,因为我对这个地区没有固定

我试图通过将学生的邮政编码加入地区邮政编码来识别学生的家乡地区。一个给定的地区可能会重叠几个邮政编码,因此学生可能会出现几个可能的家乡地区。例如,邮政编码99999可能包括休斯顿和苏格兰学区。当学生所在城市的名称与学区名称相同时,我可以将原籍学区缩小为单个记录,例如,如果学生所在城市是休斯顿,学区名称是休斯顿。在这种情况下,我只想找回休斯顿区,而不是休斯顿和苏格兰。但是,如果这个学生碰巧住在Bayou,邮政编码是99999,那么我想检索休斯顿和Sugarland两个地区,因为我对这个地区没有固定的地址。我尝试过几种方法,但都没有找到解决办法。这是 原始尝试:

Select S.Name, S.City, S.Zip, D.DistrictName
From tblStudent S
Left Join tblDistrict D on D.zip=S.zip
Where 
 (Case
     When D.DistrictName=S.City then D.DistrictName
     Else D.DistrictName
     End)=D.DistrictName

非常感谢您的任何建议

您可以尝试分别选择每个案例,然后合并两个查询

案例1:地区名称等于城市名称

案例2:没有与城市名称相等的地区名称

大概是这样的:

Select S.Name, S.City, S.Zip, D.DistrictName
From tblStudent S
Inner Join tblDistrict D on D.zip=S.zip and D.DistrictName = S.City

Union

Select S.Name, S.City, S.Zip, D.DistrictName
From tblStudent S
Inner Join tblDistrict D on D.zip=S.zip
Where not exists (
  Select D2.* from tblDistrict D2
  Where D2.DistrictName = S.City
  And D2.zip = S.zip
)

SQL FIDLE:

then和else后面都有相同的字段。无论如何,这种方法是行不通的,因为你需要知道其他行是否应该被过滤。我认为你必须将D2.zip=S.zip添加到最后一个位置,因为如果它恰好是另一个同名但邮政编码不同的地区,它不会为该学生返回任何行。例如,我添加了99998,“Bayou”,查询只返回John。在zip条件下,其工作原理与原始示例相同。感谢您的帮助!明天早上我会试试的!