SQL查询问题。提取满足以下两个条件之一的数据

时间:2019-04-09 17:43:50

标签: sql conditional clause

我正在提取已完成学位要求课程列表的学生数据。清单中的一门课程等同于另一门课程,因此,如果学生完成了两门等效的课程,则只能计入一个学位。我需要提取完成课程列表的学生的数据,同时仅过滤其中一门等效课程。

我要去哪里错了?

我尝试了不同的OR和AND NOT子句,但似乎无法获得所需的结果

use coll18_live

select ENR_STUDENT_ID, ENR_TERM, CRS_NAME, ENR_GRADE
from dbo.CA320_ENROLLMENT_VIEW_N03
WHERE ENR_CENSUS_REG_FLAG = 'Y'
and ENR_TERM in ('14/FA', '15/SP')
and not (CRS_NAME = 'BUSI-105' and CRS_NAME = 'ENGL-120')
and CRS_NAME in ('ACCT-120', 'ACCT-125', 'BUSI-100', 'BUSI-103', 'BUSI-105', 'ENGL-120') 

我希望输出的内容能够显示完成ACCT-120,ACCT-12,BUSI-100,BUSI-103和BUSI-105或ENGL-120(但不同时包括BUSI-105或ENGL-120)的学生

1 个答案:

答案 0 :(得分:0)

我认为您想使用having子句进行汇总。您无法使用WHERE来执行此操作,因为您想要的信息(显然)在不同的行中:

select ENR_STUDENT_ID
from dbo.CA320_ENROLLMENT_VIEW_N03
where ENR_CENSUS_REG_FLAG = 'Y' AND
      ENR_TERM in ('14/FA', '15/SP')
group by ENR_STUDENT_ID
having sum(case when CRS_NAME in ('ACCT-120', 'ACCT-125', 'BUSI-100', 'BUSI-103') then 1 else 0 end) = 4 and
       sum(case when CRS_NAME in ('BUSI-105', 'ENGL-120') then 1 else 0 end) > 0;