SQL查询问题。提取数据满足两个条件之一,但不是两个

问题描述 投票:0回答:1

我正在提取已完成学位要求课程列表的学生数据。列表中的其中一门课程相当于另一门课程,因此如果学生完成两门同等课程,则只能在一定程度上计算一次。我需要提取完成课程列表的学生的数据,同时只过滤其中一个等效课程。

我哪里错了?

我尝试过不同的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)的学生

sql conditional clause
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.