會是這樣的:你
WITH att
AS (SELECT studentID,
SUM(CASE WHEN attStatus = 'Yes' THEN 1 ELSE 0 END) as att_count
FROM attendance
GROUP BY studentID)
SELECT *
FROM Attendance a
INNER JOIN Student s USING (studentID)
INNER JOIN att USING (studentID)
WHERE att.att_count < 5
AND a.unitcode = 'SIT103';
工作?
你可以從你的學生,出席選擇列,你需要等
編輯:我沒有在我面前一個SQL接口tody所以一些SQL語句可能需要調整。
大衛,在新的信息的光,請嘗試以下操作:
WITH att
AS (SELECT unitcode,
studentID,
SUM(CASE WHEN attStatus = 'Yes' THEN 1 ELSE 0 END) as att_count
FROM attendance
WHERE attdate < TO_DATE('07/08/2011', 'DD/MM/YYYY')
GROUP BY unitcode,
studentID)
SELECT *
FROM Student s
INNER JOIN att USING (studentID)
WHERE att.unitcode = 'SIT103'
AND att.att_count < 5;
我的SQL * Plus現在重新運行。我只是跑:
CREATE TABLE student (
studentid NUMBER,
student_name VARCHAR2(30)
);
CREATE TABLE attendance (
studentid NUMBER,
unitcode VARCHAR2(10),
attdate DATE,
attstatus VARCHAR2(5)
);
INSERT INTO student VALUES (2106,'Jo Bloggs');
INSERT INTO student VALUES (2108,'Jo Schmoe');
INSERT INTO attendance VALUES (2106, 'SIT103', TO_DATE('05/06/2011', 'DD/MM/YYYY'), 'No');
INSERT INTO attendance VALUES (2106, 'SIT103', TO_DATE('07/07/2011', 'DD/MM/YYYY'), 'Yes');
INSERT INTO attendance VALUES (2106, 'SIT103', TO_DATE('10/05/2011', 'DD/MM/YYYY'), 'Yes');
INSERT INTO attendance VALUES (2108, 'SIT203', TO_DATE('05/05/2011', 'DD/MM/YYYY'), 'Yes');
WITH att
AS (SELECT unitcode,
studentID,
SUM(CASE WHEN attStatus = 'Yes' THEN 1 ELSE 0 END) as att_count
FROM attendance
WHERE attdate < TO_DATE('07/08/2011', 'DD/MM/YYYY')
GROUP BY unitcode,
studentID)
SELECT studentid,
student_name,
unitcode
FROM Student s
INNER JOIN att USING (studentID)
WHERE att.unitcode = 'SIT103'
AND att.att_count < 5;
,並得到:
STUDENTID STUDENT_NAME UNITCODE
2106 Jo Schmoe SIT103
哪個是正確的,不是嗎?
聚合函數不where子句工作。 –
您可以發佈ATTENDANCE表的結構和數據類型嗎? – Ollie