Newsgroup: it.comp.appl.access
Titolo: Query SQL

Dato lo schema relazionale:
ESAMI (Studente, Materia, Voto, Data) con chiave Studente, Materia
PIANIDISTUDIO (Studente, Materia, Anno) con chiave ancora Studente, Materia
Trovare con una Query SQL gli Studenti che hanno superato tutti gli esami
previsti
dal rispettivo piano di studio.
SELECT ...
FROM ......
WHERE ....
Graz!
--
Narsil

> "Narsil" news:HHUp9.20625$%
M1.5...@twister2.libero.it
:

    Impossibile. Manca una informazione. ;-))
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

     Impossibile. Manca una informazione. ;-))
Quale?
--
Narsil

Narsil ha scritto:

se su esami hai "Tutti" gli esami ed il voto o la data sono  Null per i
non
superati nessuno, altrimenti il numero di esami da fare
--
a.cara

Alessandro Cara ha scritto:

oops, non mi dire che ti conti le materie su piano di studio
--
a.cara

 Quale?
    Non ci dici come dobbiamo tradurre in essequellese "superare gli esami".


Narsil ha scritto:

quindi riformulando:
tutti gli studenti che abbiano un conteggio di materie di ESAMI maggiore
uguale
al conteggio di materie Previste dal PIANODISTUDIO
select a.studente , count(a.materie) as nesami, count(b.materie) as
npiano
from esami a, pianodistudio b
where a.studente = b.studente
group by a.studente
   having count(a.materie) >= count(b.materie)
ci sono un paio di campi in piu' e non considera l'anno
--
a.cara

     Non ci dici come dobbiamo tradurre in essequellese "superare gli
esami".
Ah, beh, è un esercizio tratto da "Basi di Dati" della McGraw-Hill e non lo
dice
esplicitamente...Cmq credo che in ESAMI registri gli esami di tutte le
materie, superati
e non superati. Voto>= 18 potrebbe essere condizione sufficiente...!
--
Narsil

Narsil ha scritto:

allora nella where ci manca "... and a.voto > 17..."
e tu ci fai perdere tempo con gli esercizi dell mcgraw-hill?
--
a.cara

 e tu ci fai perdere tempo con gli esercizi dell mcgraw-hill?
...e sai com'è, devo fare l'esame di Basi di Dati! :-)
--
Narsil

 e non superati. Voto>= 18 potrebbe essere condizione sufficiente...!
    Ok. Allora:
        SELECT
            [x Narsil PS].[Anno]
          , [x Narsil PS].[Studente]
        FROM
            [x Narsil PS]
          , [x Narsil E]
        WHERE
            ([x Narsil PS].Materia     = [x Narsil E].[Materia])
            AND
            ([x Narsil PS].Studente    = [x Narsil E].[Studente])
            AND
            (Nz([x Narsil E].[Voto],0) >=18)
        GROUP BY
            [x Narsil PS].[Anno]
          , [x Narsil PS].[Studente]
        HAVING
            ([x Narsil PS].Anno=2002)
            AND
            (
              Count([x Narsil PS].Materia)
              =
              (
                SELECT
                    Count([TEMP].[Materia]) AS ConteggioDiMateria
                FROM
                    [x Narsil PS] AS TEMP
                GROUP BY
                    [TEMP].[Anno]
                  , [TEMP].[Studente]
                HAVING
                    ([TEMP].Anno     =[x Narsil PS].Anno)
                    AND
                    ([TEMP].Studente =[x Narsil PS].Studente)
              )
            )
        ORDER BY
            [x Narsil PS].[Studente]
        ;
