Piccolo aiuto con una query

di
Anonimizzato14128
il
3 risposte

Piccolo aiuto con una query

Ciao a tutti, sono Stefy e studio informatica.
Siccome sto imparando da sola il SQL, avrei bisogno di aiuto con una query

Ho creato il Database Ospedale; ci sono diverse entità all'interno, ma vi scriverò solo quelle che servono per questa query:

PAZIENTE (idPaziente (PK), nome, cognome, dataRicovero, postoLetto)
ESAME (codice (PK), descrizione, val_min, val_max)
EFFETTUA (idPaziente, codice (FK che diventano PK), data, valore)

Vorrei che la query mi restituisse le generalità dei pazienti che hanno effettuato lo stesso esame più di una volta. Il codice dell'esame infatti identifica una tipologia di esame (codice=1, descrizione=ecografia_addome...e così via). Come faccio ad ottenere questi dati ? Immagino sia necessaria una subquery ! Mi date una mano per favore ?

3 Risposte

  • Re: Piccolo aiuto con una query

    Ciao,
    immagino tu abbia già impostato le seguenti relazioni 1 a molti:
    - PAZIENTE.idPaziente e EFFETTUA.idPaziente
    - ESAME.codice e EFFETTUA.codice
    se così non fosse ti consiglio di implementarle...

    se non ho interpretato male la tua richiesta, devi procedere in questo modo:
    - Crea una Query in modalità struttura;
    - Trascina dentro la Query la tabella "PAZIENTE"e la tabella "EFFETTUA";
    (... a questo punto se hai implementato le relazioni dovresti vederle riproposte anche qui altrimenti le devi implementare manualmente nella query...)
    - Fai doppio click (per inserire) i seguenti campi: "Cognome", "Nome" e, dalla tabella "EFFETTUA", "Codice";
    - Sempre nella struttura Query Cambia il tipo in una !uery totali (simbolo della - sommatoria -)
    - Per finire nome e cognome avranno come Formula "Raggruppamento" mentre "Codice" avrà "Conteggio"... disabilita in "Codice" la visualizzazione (togliendo il flag da Mostra) e metti criterio >1.
    Il risultato della query, come da te richiesto, sarà esclusivamente del cognome e nome dei pazienti che hanno effettuato l'esame più di una volta...

    tutto quanto detto si riassume in :
    SELECT PAZIENTE.nome, PAZIENTE.cognome
    FROM PAZIENTE INNER JOIN EFFETTUA ON PAZIENTE.idpaziente = EFFETTUA.idpaziente
    GROUP BY PAZIENTE.nome, PAZIENTE.cognome
    HAVING (((Count(EFFETTUA.codice))>1));
    
    ciao
  • Re: Piccolo aiuto con una query

    Ciao Angelo e grazie mille per avermi risposto.
    Io ho impostato una relazione molti a molti, dove Effettua è la tabella che nasce appunto dalla relazione
    Paziente n ------------ n Esame.

    Ho provato il tuo codice ed effettivamente mi restituisce il nome e cognome dei pazienti che hanno fatto più di un esame, ma non dello stesso tipo !

    Per esempio ho ottenuto:

    Mario Rossi
    Matteo Bianchi
    Fabio Gialli

    ma andando a controllare nella tabella Effettua, questi pazienti hanno effettuato rispettivamente 2 e 3 e 6 esami, ma gli esami non hanno lo stesso codice...sono esami diversi tra loro. Io invece voglio ottenere, per esempio, solo Mario Rossi che ha fatto due volte l'esame con codice 1.

    E' possibile ?
  • Re: Piccolo aiuto con una query

    Prova cosi
    SELECT PAZIENTE.nome, PAZIENTE.cognome, EFFETTUA.codice
    FROM PAZIENTE INNER JOIN EFFETTUA ON PAZIENTE.idpaziente = EFFETTUA.idpaziente
    GROUP BY PAZIENTE.nome, PAZIENTE.cognome, EFFETTUA.codice
    HAVING (((Count(EFFETTUA.codice))>1));
    
    accanto al nome e cognome vedrai il codice dell'esame ripetuto più di una volta ... se hai bisogni di sapere quante ripetizioni ha fatto per quell'esame
    SELECT PAZIENTE.nome, PAZIENTE.cognome, EFFETTUA.codice, Count(EFFETTUA.codice) AS Ripetizioni
    FROM PAZIENTE INNER JOIN EFFETTUA ON PAZIENTE.idpaziente = EFFETTUA.idpaziente
    GROUP BY PAZIENTE.nome, PAZIENTE.cognome, EFFETTUA.codice
    HAVING (((Count(EFFETTUA.codice))>1));
    
    ciao
Devi accedere o registrarti per scrivere nel forum
3 risposte