2012-11-15 3 views
1

은 두 개의 테이블이 있습니다 키).하는 다른 테이블에서 튜플 값보다 작있다

등록 계약 (CourseNo, 학년, 학기, SectionNo, StudentNo, 학년)

어떻게 각 클래스 재학생의 수는 그 클래스의 용량보다 작다는 것을 확인하기 위해 SQL을 사용?

파트를 개별적으로 수행하는 방법을 알고 있지만 각 클래스에 등록한 학생 수()와 해당 클래스의 용량을 비교하면 잃어버린 부분입니다. 올바른 값과 비교하는 방법을 모르겠습니다.

감사

편집 : 나는이 주장을 만들기 위해 SQL Server 2008을 사용하고,하지만 난 그것을 지원하지 않기 때문에 (SQL Server의 트리거를 만드는 것 외에도, 일반 SQL을 수행하는 방법을 알고 싶습니다 주장)

+1

무엇 RDBMS 당신이 지원하는 사용하는'ASSERTION'를 만드시겠습니까? 사용중인 데이터베이스 기술로 질문에 태그를 답니다. 여러분이 사용하고있는 데이터베이스에 대한 최상의 답을 줄 수 있습니다. –

+1

태그를 업데이트하고 컨텍스트에서 추가했습니다. – Strzelec

답변

0
select c.CourseNo, c.SectionNo, c.[Year], c.Semester, Capacity, count(*) as Enrolled 
from classes as c 
join enrollments as e 
    on c.CourseNo = e.CourseNo 
    and c.SectionNo = e.SectionNo 
    and c.[Year] = e.[Year] 
    and c.Semester = e.Semester 
group by c.CourseNo, c.SectionNo, c.[Year], c.Semester, Capacity 
having count(StudentNo) > Capacity 
+0

'및 c.SectionNo = e.SectionNo 및 c. [Year] = e. [Year] 및 c.Semester = e.Semester' 전용 특정 클래스 섹션. 내가 코스 노 (courseno)에만 가입하면 올바른 결과를 얻는 것 같습니다. – Strzelec

0
select courseno, capacity, count(*) as enrollments 
from classes c 
join enrollments e on e.courseno = c.courseno 
group by c.courseno , capacity 
+0

이것이 필요한만큼 반환됩니다. 그러나 "Capacity> Enrollments"조건을 적용하려고하면 다음 오류가 발생합니다. 'Msg 207, Level 16, State 1, Line 3 잘못된 열 이름 'Enrollments'. 사용 중 : 'Where Capacity> Enrollments.' having 절을 사용해 보았지만 원하는 결과를 얻지 못했습니다. – Strzelec

+0

추가 검사시이 코드는 제대로 작동하지 않습니다. 카운트 (*)는 각 코스에 등록한 학생의 수를 계산하지만 단면도가 아닙니다. 각 강좌는 여러 개의 섹션을 가질 수 있으며 용량은 각 섹션을 나타냅니다. – Strzelec

+0

섹션을 선택 및 그룹에 추가하십시오. –