我正在提取已完成学位要求课程列表的学生数据。清单中的一门课程等同于另一门课程,因此,如果学生完成了两门等效的课程,则只能计入一个学位。我需要提取完成课程列表的学生的数据,同时仅过滤其中一门等效课程。
我要去哪里错了?
我尝试了不同的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)的学生>
答案 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;