,你需要獲得的學分總和對於一個給定的學生,這將導致您
讓我們打破它考慮一組。首先,你需要< 3的學生。5 GPA,這是簡單的只是:
SELECT S.Id, S.Name
FROM Student S
WHERE S.GPA < 3.5
它做了一個有點棘手,通過使每個學生在入學的招生多列,而不是多個行(這是比較正常的)
就個人而言,我想將其轉換成一個 '規範化' 的觀點:
SELECT StudentId, Course1 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course2 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course3 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course4 AS CourseId
FROM Enrollment E
再加上第一查詢:
SELECT S.Id, S.Name
FROM Student S
JOIN
(
SELECT StudentId, Course1 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course2 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course3 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course4 AS CourseId
FROM Enrollment E
) E
ON E.StudentId = S.StudentId
WHERE S.GPA < 3.5
然後,你需要實際的課程,以獲得CreditHourRating:
SELECT S.Id, S.Name, C.CreditHourRating
FROM Student S
JOIN
(
SELECT StudentId, Course1 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course2 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course3 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course4 AS CourseId
FROM Enrollment E
) E
ON E.StudentId = S.StudentId
JOIN Course C
ON E.CourseId = C.CourseId
WHERE S.GPA < 3.5
然後你只需要合計爲每一位學生,因此該查詢:
SELECT S.Id, S.Name, SUM(C.CreditHourRating)
FROM Student S
JOIN
(
SELECT StudentId, Course1 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course2 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course3 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course4 AS CourseId
FROM Enrollment E
) E
ON E.StudentId = S.StudentId
JOIN Course C
ON E.CourseId = C.CourseId
WHERE S.GPA < 3.5
GROUP BY S.Id, S.Name
最後,你就具備的條件信用小時收費:
SELECT S.Id, S.Name, SUM(C.CreditHourRating)
FROM Student S
JOIN
(
SELECT StudentId, Course1 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course2 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course3 AS CourseId
FROM Enrollment E
UNION
SELECT StudentId, Course4 AS CourseId
FROM Enrollment E
) E
ON E.StudentId = S.StudentId
JOIN Course C
ON E.CourseId = C.CourseId
WHERE S.GPA < 3.5
GROUP BY S.Id, S.Name
HAVING SUM(C.CreditHourRating) < 9
+1對結果集進行篩選,以獲得詳細的答案和解釋。 –
感謝您將它分解成像Fergus !!!!!完美的工作,我現在完全理解實施。再次感謝! – user3029300