SQL 查询问题.提取数据满足两个条件之一,但不能同时满足两个条件



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

我哪里出错了?

我已经尝试了不同的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(的学生

我认为您希望使用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;

最新更新