Query a campi incrociati?

di il
6 risposte

Query a campi incrociati?

Buongiorno. sono nuovo del forum. vi chiedo un aiuto per me irrisolvibile:

ho creato 2 tabelle AUTIERI e AUTO così come di seguito riportato:

AUTIERI nominativo_autiere (testo breve), utilizzo_dal (gg/mm/aa), utilizzo_al (gg/mm/aa), autovettura (testo breve)
AUTO autovettura (testo breve), tipologia (testo breve; può essere MAGGIORE oppure MINORE)

Ottengo quindi una maschera dalla tabella AUTIERI in cui, aggiungendo un text con un DLOOKUP, in base all autovettura selezionata, mi segnala se la stessa e' MAGGIORE oppure MINORE.

Per il rendiconto mensile seguono 2 query da dove ricaverò per ogni nominativo_autiere il nr delle giornate di guida con autovettura MAGGIORE e con autovettura MINORE.
...fin qui tutto OK

Il problema nasce dal fatto che un nominativo_autiere puo' guidare nello stesso giorno autovetture MAGGIORE e MINORE o per periodi temporali che si incastrano o sovrappongono anche in parte.
in questi casi, nel rendiconto mensile, vorrei che l'utilizzo delle auto MINORE non fossero conteggiato

spero di essermi spiegato :lol:

grazie anticipato a tutti

6 Risposte

  • Re: Query a campi incrociati?

    fad ha scritto:


    AUTIERI nominativo_autiere (testo breve), utilizzo_dal (gg/mm/aa), utilizzo_al (gg/mm/aa), autovettura (testo breve)
    AUTO autovettura (testo breve), tipologia (testo breve; può essere MAGGIORE oppure MINORE)
    Per me ci sono gravi problemi di "normalizzazione".
    1. I campi di Autieri non sono "omogenei". Gli Autieri sono Autisti, vero? Se sì, sono Persone, quindi ci vogliono campi riguardanti solo i loro dati "anagrafici".
    2. Fra Autieri e Auto manca sicuramente una tabella di congiunzione dove tracci i Viaggi.
  • Re: Query a campi incrociati?

    Grazie Osvaldo per la rapida risposta.

    in merito ti rappresento che
    1. l'anagrafica non mi serve. solo il nominativo dell'Autista (quindi nessuna relazione particolare ad altra tabella)
    2.i viaggi o l'itinerario non mi serve

    è solo una rendicontazione temporale escludendo i conteggi di autovetture MINORE nei casi di periodi ad incastro o soprapposti
  • Re: Query a campi incrociati?

    La tua implementazione è contorta, ad esempio se hai una relazione fra le due tabelle non è necessario, in un report, effettuare delle DLookup; inoltre non si comprende ove sia la sovrapposizione (nella stessa data ?)
    In ogni caso non è certo con quanto indichi in titolo (Query a campi incrociati?) che non presenti le auto con tipologia "MINORE" ma semplicemente impiegando l'operatore NOT.
    http://www.blueclaw-db.com/accessquerysql/not.ht
  • Re: Query a campi incrociati?

    willy55 ha scritto:


    La tua implementazione è contorta, ad esempio se hai una relazione fra le due tabelle non è necessario, in un report, effettuare delle DLookup; inoltre non si comprende ove sia la sovrapposizione (nella stessa data ?)
    In ogni caso non è certo con quanto indichi in titolo (Query a campi incrociati?) che non presenti le auto con tipologia "MINORE" ma semplicemente impiegando l'operatore NOT.
    http://www.blueclaw-db.com/accessquerysql/not.ht
    grazie tante willy. è esatto per la questione dlookup ho risolto come mi hai suggerito!!!!

    la sovrapposizione di data è la questione difficile. ti faccio un esempio:

    primo record - (autiere) Mario (dal) 01/01/2018 (al) 04/01/2018 (autovettura) panda (tipologia) minore
    secondo record - (autiere) Mario (dal) 03/01/2018 (al) 05/01/2018 (autovettura) croma (tipologia) maggiore

    Mario ha guidato 4gg l'auto con tipologia MINORE e 3gg con tipologia Maggiore

    nei giorni in cui Mario ha guidato entrambi le auto (tipologia maggiore e minore, cioè dal 03/01/2018 al 04/01/2018) vorrei che mi contasse solo le guide con tipologia maggiore non considerando le guide con auto di tipologia minore;

    per cui il risultato dovrebbe essere:

    Mario ha guidato 2gg l'auto con tipologia MINORE e 3gg con tipologia Maggiore
  • Re: Query a campi incrociati?

    "Query a campi incrociati" è una particolare query che Access consente di implementare in base a tutt'altri ragionamenti, ma non ha nulla a che vedere con il discorso così impostato.
    Rimango in totale disaccordo sullo scenario tabelle presentato.
  • Re: Query a campi incrociati?

    Fad,
    le soluzioni da implementare possono essere varie: in base alla struttura di partenza, conoscenza, competenza, e risultati che si vogliono avere.
    Te ne cito, brevemente, alcune.

    1) Se rivedi la tua struttura in modo da avere le occorrenze secondo una situazione giornaliera (con le auto trattate da ciascun autista) potresti semplificare l'operazione.
    Ad esempio una tabella (o query risultante) così strutturata:

    Autista DataGuida Autovettura Tipologia
    Mario 01/01/2018 Panda Minore
    Mario 02/01/2018 Panda Minore
    Mario 03/01/2018 Panda Minore
    Mario 04/01/2018 Panda Minore
    Mario 03/01/2018 Croma Maggiore
    Mario 04/01/2018 Croma Maggiore
    Mario 05/01/2018 Croma Maggiore

    In tal caso con una semplice query potrai determinare i dati raggruppati giornalmente prendendo fra "Maggiore" e "Minore" il valore minimo, che in ordine alfabetico è il primo dei due, come nell'esempio del seguente codice SQL:
    
    SELECT GiorniAuto.Autista, GiorniAuto.DataGuida, Count(GiorniAuto.Tipologia) AS NrGuideAuto, Min(GiorniAuto.Tipologia) AS MinDiTipologia
    FROM GiorniAuto
    GROUP BY GiorniAuto.Autista, GiorniAuto.DataGuida;
    
    in modo da ottenere la seguente lista:

    Autista DataGuida NrGuideAuto MinDiTipologia
    Mario 01/01/2018 1 Minore
    Mario 02/01/2018 1 Minore
    Mario 03/01/2018 2 Maggiore
    Mario 04/01/2018 2 Maggiore
    Mario 05/01/2018 1 Maggiore

    ove potrai effettuare le sintesi e/o calcoli da te voluti.

    2) Altra soluzione è operare con codice VBA, in modo da ciclare, nel recordset, fra le varie date ordinate e, per ciascun giorno, prendere il preferenziale (nel qual caso, quando la Tipologia è "Maggiore").

    3) Qualora si voglia rappresentare, esclusivamente, un insieme ridotto di date come ad esempio i giorni in uno specifico mese, allora si può pensare ad una query a campi incrociati, stabilendo un criterio preferenziale per la presentazione giornaliera della Tipologia ("Maggiore" o "Minore"). In tal caso il report dovrà essere prefissato sul numero massimo dei campi prestabiliti:
    http://www.fmsinc.com/microsoftaccess/query/crosstab-report/index.html

    4) Se si vuole lasciare inalterata la struttura (con i campi "utilizzo_dal", "utilizzo_al") dovrai gestire l'intervallo, effettuando una elaborazione per ciascun autista e calcolare i vari giorni in modo da determinare se la Data progressiva (in elaborazione) ricade nel periodo di calcolo e pertanto si conteggi in base alla "Tipologia".
    In tal caso, per partire, devi impiegare le funzioni che operano con le date:
    https://support.office.com/it-it/article/Esempi-dell-uso-di-date-come-criteri-in-query-di-Access-aea83b3b-46eb-43dd-8689-5fc961f21762
    https://www.pluralsight.com/blog/it-ops/microsoft-access-date-functions
    http://www.databasedev.co.uk/dateadd_calculation.htm
    https://stackoverflow.com/questions/45887606/make-interval-list-between-two-date-in-vba
    http://boards.straightdope.com/sdmb/showthread.php?t=297714
    http://www.cpearson.com/excel/dateintervals.ht
Devi accedere o registrarti per scrivere nel forum
6 risposte