Query access restituisce troppi risultati

di il
12 risposte

Query access restituisce troppi risultati

Buongiorno a tutti,

ciò che sto per chiedere sarà sicuramente una stupidata per molti di voi...mi spiego.

Ho importato due file Excel in access.

Il primo file ha una colonna denominata Cognome ed ha un centinaio di record (il record Buratti è ripetuto 11 volte)
Il secondo file contiene la colonna Cognome e una colonna Auto (il record Buratti è ripetuto 9 volte)
Lo stesso cognome è presente in più record sia nel primo foglio excel che nel secondo.

Ora vorrei fare una query che mi restituisca per ogni cognome le auto associate.
Provando a farla noto che mi moltiplica i risultati in base a quante volte il cognome viene ripetuto nel primo e nel secondo foglio foglio e quindi ottengo 99 righe (11x9)

Cognome Auto
Buratti Fiat
Buratti Lancia
Buratti Ferrari
etc...
e poi ripete
Buratti Fiat
Buratti Lancia
Buratti Ferrari
etc....x 99 record totali

Io vorrei invece che mi restituisse solo 11 record quelli del primo foglio....

Non importa se qualche riga dovesse avere il campo Auto "vuoto"

Spero di essermi spiegato...grazie e buon pomeriggio

12 Risposte

  • Re: Query access restituisce troppi risultati

    Non hai applicato (venendo da Excel) i criteri di normalizzazione per un DBMS ottenendo, probabilmente, il prodotto cartesiano di 11x9 = 99 occorrenze.
    Inoltre in un DBMS si impiegano delle chiavi in modo da assicurare i legami fra le tabelle.
    Comunque, basandoti sul primo file (dove hai la colonna 'denominata' Cognome che sarà in Access il relativo campo) dovrai realizzare una query con il solo campo Cognome in modo da avere i nominativi ordinati ed univoci (in tal modo gli 11 Buratti si presenteranno una sola volta).
    Questa query la dovrai mettere in relazione con la seconda tabella che contiene i dati delle auto ed otterrai per ciascun nominativo Non hai applicato (venendo da Excel) i criteri di normalizzazione per un DBMS ottenendo, probabilmente il prodotto cartesiano di 11x9 = 99 occcorenze.
    Inoltre in un DBMS si impiegano delle chiavi in modo da assicurare i legami fra le tabelle.
    Comunque, basandoti sul primo file (dove hai la colonna 'denominata' Cognome che sarà in Access il relativo campo) dovrai realizzare una query con il solo campo Cognome in modo da avere i nominativi ordinati ed univoci (in tal modo gli 11 Buratti si presenteranno una sola volta).
    Questa query la dovrai mettere in relazione con la seconda tabella che contiene i dati delle auto ed otterrai per ciascun nominativo (a meno di omonimie) tutte le sue autovetture (a meno di omonimie che si riferiscono a soggetti diversi e che andrebbero, appunto gestiti attraverso identificativi come chiavi disponibili nel DB).
  • Re: Query access restituisce troppi risultati

    Come immaginavo non mi sono spiegato...

    faccio un esempio più semplice:

    Sul foglio excel ho due colonne (cognome, compleanno)
    Sull'altro foglio excel ho (cognome, regalo)
    Primo Foglio
    Buratti 02/05/2000
    Buratti 03/06/1999
    Buratti 02/01/1986
    Rossi 01/06/2001
    Rossi 02/04/2000
    Secondo foglio
    Buratti gioco in scatola
    Buratti videogames
    Rossi pallone

    Ora vorrei fare in modo di eseguire una query che mi colleghi i cognomi uguali e che aggiunga una colonna finale (regalo) ed ottonere il seguente risultato:

    Buratti 02/05/2000 gioco in scatola
    Buratti 03/06/1999 videogames
    Buratti 02/01/1986
    Rossi 01/06/2001 pallone

    Avete una soluzione?
  • Re: Query access restituisce troppi risultati

    Burton_snow ha scritto:


    ...faccio un esempio più semplice:
    Spero che l'esempio sia stato semplificato troppo perché se la situazione è veramente quella è impossibile ottenere quello che chiedi. Non c'è alcun modo infatti di distinguere a quale Buratti abbinare il regalo "gioco in scatola". Deve esistere un sistema inequivocabile per collegare le informazioni delle due tabelle.
    Se invece si può costruire questo abbinamento in base alla sequenza delle informazioni presenti sui fogli excel bisogna lavorare di codice in fase di importazione.
  • Re: Query access restituisce troppi risultati

    Ciao Phil,

    purtroppo la situazione è proprio questa...però dovrei aggiungere un dettaglio molto importante....ovvero che non mi interessa che l'abbinamento cognome-regalo sia corretto....mi interessa solo che a fianco di Buratti ci sia un regalo di uno dei Buratti...ed accanto ai rossi ci sia un regalo dei rossi...
  • Re: Query access restituisce troppi risultati

    Burton_snow ha scritto:


    ...non mi interessa che l'abbinamento cognome-regalo sia corretto....mi interessa solo che a fianco di Buratti ci sia un regalo di uno dei Buratti...ed accanto ai rossi ci sia un regalo dei rossi...
    e magari che il ragalo non si ripeta? Vedo nell'esempio che il "terzo Buratti" è rimasto a mani vuote.
  • Re: Query access restituisce troppi risultati

    Esattamente....
  • Re: Query access restituisce troppi risultati

    Burton_snow ha scritto:


    Esattamente....
    Credo che con questi presupposti la cosa sia veramente difficile, tanto che secondo me forse sarebbe d'aiuto spiegare "nel concreto" l'uso di quei dati, per vedere se è possibile trovare una strada diversa per raggiugere quello che ti serve.
  • Re: Query access restituisce troppi risultati

    Ok....vediamo se riesco a spiegarmi:

    Sto estraendo dei dati da un DB e li sto salvando in due file excel separati....questi due file hanno in comune delle matricole di stampanti
    Su un file ho le colonne Matricola - Data Utilizzo....sull'altro file ho Matricola - Stampe Effettuate
    Vorrei un file con Matricola Data Utilizzo Stampe effettuate...
    Nella colonna stampe effettuate ho anche la data di stampa...per questo dicevo che non mi interessa che vengano associate correttamente perchè poi provvederò io manualmente a spostare i dati della colonna Stampe effettuate a fianco della Data Utilizzo corrispondente
    File 1
    Matricola Data utilizzo
    es1231 11/06/2017
    es1231 14/06/2017
    etc...
    File 2
    Matricola Stampe effettuate
    es1231 14/06/2017 231
    es1231 15/06/2017 210

    File finale
    Matricola Data utilizzo Stampe effettuate
    es1231 14/06/2017 15/06/2017 210

    Vorrei che la query aggiungesse al primo file la colonna Stampe effettuate, popolandola con i dati che trova sul secondo file per la matricola corrispondente. L'ordine della colonna stampe effettuate poi lo modificherò io.
  • Re: Query access restituisce troppi risultati

    Burton_snow,
    stai creando un bel guazzabuglio nella descrizione, ed i tuoi esempi non aiutano a capire il problema (visto che sono in antesi fra loro).
    Per realizzare un algoritmo deve esistere una logica che, per passi successivi, permetta di risolvere il problema.
    Non si è descritta, sino ad ora, una chiara logica applicabile per cui si va a tentativi nell'interpretare l'esigenza.
    Nel primo esempio, pare che i dati non sono correlati fra le tabelle, quindi se si vuole tutti i dati della prima tabella con l'aggiunta di un campo che possa contenere i dati della seconda (con i regali dei vari soggetti) ed indipendentemente dalla data (ma mantenendo i valori della prima tabella).
    In tal caso operare, semplicemente, con le query non è praticabile in quanto non esistono legami (oltre al nominativo) che permettano di identificare le occorrenze da porre in relazione.
    Pertanto si può impiegare del codice VBA che nella prima tabella inserisca un nuovo campo e ciclando nei recordset (per ciascun record della prima) aggiunga l'informazione sul dono ricevuto (presa dalla seconda tabella).
    Questo con il vincolo che il numero di occorrenze della prima tabella siano (per ogni nominativo) sufficienti a contenere quelli della seconda (altrimenti si deve aggiungere un record con il nome e determinando la data da applicare

    Nel secondo esempio, parli che i dati provengono da un DB, passi ad Excel e giungi ad Access e dici di non volere associare le tabelle in quanto seppure correlate (matricola della stampante e data di stampa identificano quando si sono rilevate il numero di stampe effettuate) vuoi effettuare manualmente l'operazione:

    Burton_snow ha scritto:


    Nella colonna stampe effettuate ho anche la data di stampa...per questo dicevo che non mi interessa che vengano associate correttamente perché poi provvederò io manualmente a spostare i dati della colonna Stampe effettuate a fianco della Data Utilizzo corrispondente
    mentre nelle conclusioni indichi:

    Burton_snow ha scritto:


    Vorrei che la query aggiungesse al primo file la colonna Stampe effettuate, popolandola con i dati che trova sul secondo file per la matricola corrispondente. L'ordine della colonna stampe effettuate poi lo modificherò io.
    ove rispetto al primo esempio con i dati (delle date in verticale) sembra che le vuoi accorpare in orizzontale.
    Da considerare che questa prerogativa potrebbe essere risolta (sempre in VBA) seguendo questo esempio:
    http://allenbrowne.com/func-concat.htm
    Ma da notare che nella prima tabella troviamo la data del 11/06/2017 (per medesima matricola) che non compare nelle date del file finale il che farebbe pensare che i dati provengono solo dal secondo file il che lascia sconcertati nella logica che si vuole applicare.

    Insomma, alla luce di quanto sopra, appaiono contorte le problematiche prospettate ed è consigliabile chiarire nel dettaglio e, dal punto di vista tecnico, lo scenario complessivo ed il requisito effettivo.
  • Re: Query access restituisce troppi risultati

    willy55 ha scritto:


    Pertanto si può impiegare del codice VBA che nella prima tabella inserisca un nuovo campo e ciclando nei recordset (per ciascun record della prima) aggiunga l'informazione sul dono ricevuto (presa dalla seconda tabella).
    Questo con il vincolo che il numero di occorrenze della prima tabella siano (per ogni nominativo) sufficienti a contenere quelli della seconda (altrimenti si deve aggiungere un record con il nome e determinando la data da applicare
    Direi che questa soluzione è quella che dovrebbe fare al caso mio....chiedo scusa se mi sono spiegato veramente male...
    Quindi come dovrei procedere?

    Grazie e scusate ancora
  • Re: Query access restituisce troppi risultati

    Nella descrizione, ti ho elencato (con una scaletta) le operazioni da effettuare, cerca di tradurla nella sintassi del linguaggio VBA (applicabile ad Access) e presenta la tua soluzione.
  • Re: Query access restituisce troppi risultati

    Ti ringrazio molto per la tua disponibilità nel risolvere il mio problema, purtroppo a quanto pare la cosa è più grande di me...non sono un programmatore e non so nulla di Vba. Credo proprio di essere nel posto sbagliato Grazie infinite!
Devi accedere o registrarti per scrivere nel forum
12 risposte