Cześć,
robię zadanie z matury próbnej z informatyki i na razie mam drobne problemy z SQLem w Accessie. Już pisałem o zadaniu 6.1 w osobnym wątku, a teraz podobny problem z zadaniem 6.2, więc przekleję wprowadzenie z tamtego wątku:
Są trzy tabele
- Studenci (_indeks_, imie, nazwisko)
- Kursy (_id_, tytul, godzin, punktow), gdzie punktow oznacza ile punktow za zaliczenie kursu się dostaje
- Szkolenia( osoba, kurs, zaliczenie) gdzie osoba to numer indeksu studenta, zaliczenie to data zaliczenia, a kurs to numer kursu
i pierwsze zadanie z matury brzmi: Ilu studentów zaliczyło w drugim terminie? (do 30 września 2016). Skonstruowałem więc takie zapytanie:
SELECT Studenci.Indeks, Studenci.Nazwisko, Studenci.Imie, Sum(Kursy.Punktow) AS Suma_punktow FROM Kursy INNER JOIN (Studenci INNER JOIN Szkolenia ON Studenci.Indeks = Szkolenia.Osoba) ON Kursy.Id = Szkolenia.Kurs
WHERE Szkolenia.Zaliczenie> #6/30/2016# AND Szkolenia.Zaliczenie <= #9/30/2016#
GROUP BY Studenci.Imie, Studenci.Nazwisko, Studenci.Indeks HAVING Sum(Kursy.Punktow) >=15 ORDER BY Studenci.Indeks;
ale to nie jest odpowiedź właściwa, bo w tym zestawieniu dostanę tylko tych uczniów, którzy WSZYSTKO zaliczyli w 2 terminach. A problem polega na tym, że muszę wyłapać tych, którzy w pierwszych terminach nie zebrali 15 punktów, ale już przed 2 terminem dobili do tych 15. I skończyła mi się koncepcja. Bo owszem, wyłapać tych, którzy mieli mniej niż 15 punktów po 1 terminie umiem, ale jak wśród nich wywalić tych, którzy mieli mniej niż 15 punktów po 2 terminie, czyli nie zaliczyli wcale.