QUERY UNIONE CREA MOLTI RECORD

di il
9 risposte

QUERY UNIONE CREA MOLTI RECORD

Buona sera,
lo scopo del mio database è la realizzazione di un report trimestrale da inviare al commercialista per il recupero delle accise sul carburante acquistato.
Il report deve essere così composto:
Targa: targa del veicolo
Possesso: codice specifico che sta ad indicare se il mezzo è di proprietà, in leasing, a noleggio, etc.
Classe: indica la classe di emissioni di co2 del veicolo
Km: km percorsi dal veicolo
Lt : litri rifornimento effettuati al veicolo
Fattura: numero della fattura in cui sono presenti i rifornimenti
(nel report le precedenti tre colonne vanno fatte per ogni singolo mese del trimestre)
Km percorsi nel trimestre: somma dei record che riportano i km
Lt rifornimento nel trimestre: somma dei record che riportano i lt
Km veicolo alla fine del trimestre: km che il veicolo segna sul conta kilometri alla fine del trimestre

Per arrivare a questo risultato ho creato un DB con le seguenti tabelle

Registro Rifornimenti
IDRifornimento (PK)
Data
Targa (FK)
IDAutista (FK)
Km
Lt
IDTipoCarburante (FK)

Rilevazioni Mensili
Targa (PK)
Ap (sta per anno precedente)
Gennaio
Febbraio
Marzo
Aprile
Maggio
Giugno
Luglio
Agosto
Settembre
Ottobre
Novembre
Dicembre

Anagrafica Mezzi
Targa (PK)
Possesso
Classe

Anagrafica Autisti
IDAutista (PK)
Cognome e Nome

Anagrafica Società
SPiva (PK)
Regione Sociale

Anagrafica Fornitori
FPiva (PK)
Regione Sociale

Anagrafica Tessere
NTessera (PK)
Pin
FPiva (FK)
SPiva (FK)
Targa (FK)

Registro Fatture
IDFattura
Data
FPiva (FK)
NFattura

Successivamente ho creato 3 query

Qsommaltmesetarga (tabella Registro Rifornimenti)
Data (visualizzata per mese)
Targa
Somma litri

Qkmmesetarga (tabella Rivelazioni Mensili)
Targa
Gennaio: Gennaio - AP
Febbraio : Febbraio - Gennaio
Marzio: Marzo - Febbraio
Aprile... come sopra fino a dicembre

Qftmese (tabella Registro Fatture)
Data (visualizzata per mese)
FPiva
NFattura

Successivamente ho creato una quarta query in cui volevo unire tutto per poi creare un report ma mi fa molti record.
Per spiegarmi meglio il risultato dovrebbe essere un record con targa possesso classe lt km nfattura se ha fatto rifornimenti con un solo fornitore
Più record uguali con solo il nfattura che varia se ha fatto rifornimenti con più fornitori

La query è così composta

Anagrafica Mezzi.Targa
Anagrafica Mezzi.Possesso
Anagrafica Mezxi.Classe
Qsommaltmesetarga.Sommalt (criterio 01)
Qkmmesetarga.gennaio
Qftmese.Nfattura

Ho provato a fare

Potete aiutarmi?

Grazie mille

9 Risposte

  • Re: QUERY UNIONE CREA MOLTI RECORD

    Io eliminerei la tabella [Rilevazioni Mensili] che è ricavabile con una query da [Registro Rifornimenti].

    Già che ci siamo, eliminerei anche [Anagrafica Fornitori] e la accorperei ad [Anagrafica Societa], aggiungendo un campo per distinguere i record (ad esempio un campo Fornitore di tipo Si/No). Questo campo è da inglobare nella PK, se non si vuole passare ad usare un ID autoincrementale e muovere la PK su quest'ultimo.

    Il campo [Km] in [Registro Rifornimenti] prevede l'inserimento dei kilometri totali del mezzo o di quelli percorsi dall'ultimo rifornimento?

    Non vedo il collegamento tra Fatture e Rifornimenti. Senza questo, come le estrapoli le informazioni che chiedi? In teoria dovresti partire filtrando le fatture del trimestre e fare la JOIN con i rifornimenti per ottenere i km.
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Sgrubak ha scritto:


    Io eliminerei la tabella [Rilevazioni Mensili] che è ricavabile con una query da [Registro Rifornimenti].

    Già che ci siamo, eliminerei anche [Anagrafica Fornitori] e la accorperei ad [Anagrafica Societa], aggiungendo un campo per distinguere i record (ad esempio un campo Fornitore di tipo Si/No). Questo campo è da inglobare nella PK, se non si vuole passare ad usare un ID autoincrementale e muovere la PK su quest'ultimo.

    Il campo [Km] in [Registro Rifornimenti] prevede l'inserimento dei kilometri totali del mezzo o di quelli percorsi dall'ultimo rifornimento?

    Non vedo il collegamento tra Fatture e Rifornimenti. Senza questo, come le estrapoli le informazioni che chiedi? In teoria dovresti partire filtrando le fatture del trimestre e fare la JOIN con i rifornimenti per ottenere i km.
    Intanto grazie Sgrubak per i tuoi consigli

    La tabella [Rilevazioni Mensili] non si può eliminare in quanto i mezzi di cui stiamo parlando sono camion che hanno il serbatoio che vanno dai 450 a 850 lt e possono percorrere anche 2500 km con un pieno. Per tale motivo è casuale il rifornimento l'ultimo giorno del mese.

    Per anagrafica fornitori applico la modifica che mi hai consigliato

    Il campo [Km] in [Registro Rifornimenti] prevede l'inserimento dei kilometri che il conta kilometri del mezzo segna al momento del rifornimento.


    Per la query perdonami, sono stato troppo sintetico.
    La query prevede si visualizzare questi campi:

    Anagrafica Mezzi.Targa
    Anagrafica Mezzi.Possesso
    Anagrafica Mezxi.Classe
    Qsommaltmesetarga.Sommalt (criterio 01)
    Qkmmesetarga.gennaio
    Qftmese.Nfattura

    ma ci sono altri campi che ho inserito per ottenere il risultato è sono:

    Anagrafica Tessere.NTessera

    questo campo collega i campi Anagrafica Mezzi. Targa, Anagrafica Tessera.Targa, Anagrafica Tessere.Targa, Anagrafica Fornitori.FPiva, Registro Fatture.FPiva

    Spero di essere stato più chiaro
    Attendo tue
    Grazie mille
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Già che ci siamo, eliminerei anche [Anagrafica Fornitori] e la accorperei ad [Anagrafica Societa], aggiungendo un campo per distinguere i record (ad esempio un campo Fornitore di tipo Si/No). Questo campo è da inglobare nella PK, se non si vuole passare ad usare un ID autoincrementale e muovere la PK su quest'ultimo.
    Qui ho rilevato un problema, come faccio a dire ad Access, netta tabella Anagrafica Tessera chi è il fornitore e chi il cliente?
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Monster88 ha scritto:


    La tabella [Rilevazioni Mensili] non si può eliminare in quanto i mezzi di cui stiamo parlando sono camion che hanno il serbatoio che vanno dai 450 a 850 lt e possono percorrere anche 2500 km con un pieno. Per tale motivo è casuale il rifornimento l'ultimo giorno del mese.
    Ok ora ho capito. Suggerirei di cambiare la struttura della tabella impostando i campi:
    IdKilometraggio
    Targa
    Mese
    Anno
    Kilometraggio
    Con la struttura attuale presumo tu aggiornassi il campo relativo all'anno precedente e svuotassi poi tutti i campi relativi ai mesi?

    Monster88 ha scritto:


    Il campo [Km] in [Registro Rifornimenti] prevede l'inserimento dei kilometri che il conta kilometri del mezzo segna al momento del rifornimento.
    Quindi puoi ottenere i km percorsi dal mezzo calcolando la differenza di km tra l'ultimo e il penultimo rifornimento.

    Monster88 ha scritto:


    Qui ho rilevato un problema, come faccio a dire ad Access, netta tabella Anagrafica Tessera chi è il fornitore e chi il cliente?
    Nella maschera d'inserimento, imposterei i due campi con una casella combinata le cui origini riga sono le due Query che estrapolano l'elenco di clienti e fornitori.

    Per restare sul problema iniziale, credo che il problema sia qui

    Monster88 ha scritto:


    Per la query perdonami, sono stato troppo sintetico.
    ...
    questo campo collega i campi Anagrafica Mezzi. Targa, Anagrafica Tessera.Targa, Anagrafica Tessere.Targa, Anagrafica Fornitori.FPiva, Registro Fatture.FPiva
    dato che tu devi estrapolare l'elenco delle fatture e aggiungere dettagli, come ottieni questi dettagli partendo dalle fatture? Attualmente immagino che un fornitore emetta una fattura alla fine di ogni mese, ma potrebbe non essere sempre così, ed inoltre avrai sicuramente più mezzi legati alla stessa fattura.
    Quindi dovresti sapere, per ogni fattura, a quale/i rifornimento/i si riferisce. Cosi poi dalle fatture estrapoli i rifornimenti. Dai rifornimenti estrapoli le targhe e i litri, dalle targhe ottieni [Possesso],[Classe] ed i km (che siano quelli a fine mese piuttosto che quelli effettivi tra i vari rifornimenti). Così dovresti avere delle JOIN corrette e non avere i record multipli di cui parlavi, impostando correttamente i filtri.
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Ok ora ho capito. Suggerirei di cambiare la struttura della tabella impostando i campi:
    IdKilometraggio
    Targa
    Mese
    Anno
    Kilometraggio
    Grazie del consiglio, applicherò però da qui poi come faccio a calcolarmi i km percorsi?
    Faccio una query di selezione per anno targa mese e poi una query a campi incrociati a cui far fare i calcoli?
    Con la struttura attuale presumo tu aggiornassi il campo relativo all'anno precedente e svuotassi poi tutti i campi relativi ai mesi?
    Magari, non sono così bravo.
    Quindi puoi ottenere i km percorsi dal mezzo calcolando la differenza di km tra l'ultimo e il penultimo rifornimento.
    Si, è un dato utile ma per una diversa lavorazione, ma nel mio caso ho bisogno della differenza tra i km segnati dal mezzo l’ultimo giorno del mese con i km dell’ultimo giorno del mese precedente
    Nella maschera d'inserimento, imposterei i due campi con una casella combinata le cui origini riga sono le due Query che estrapolano l'elenco di clienti e fornitori.
    Scusami, non mi è chiaro.

    Il DB è ancora in fase molto embrionale in quanto prima devo trovare il modo di arrivare ad ottenere i dati che mi servono facendo dei test.

    Nella tabella Anagrafica Tessere ho bisogno di associare sia un fornitore che un cliente in quanto nel DB vengono inseriti i rifornimenti di un gruppo di società e ogni società deve avere il suo report.

    Come posso farlo con il tuo consiglio di fare un’unica Anagrafica Societa con i campi Piva e Si/No come chiave primaria?
    dato che tu devi estrapolare l'elenco delle fatture e aggiungere dettagli, come ottieni questi dettagli partendo dalle fatture? Attualmente immagino che un fornitore emetta una fattura alla fine di ogni mese, ma potrebbe non essere sempre così, ed inoltre avrai sicuramente più mezzi legati alla stessa fattura.
    Quindi dovresti sapere, per ogni fattura, a quale/i rifornimento/i si riferisce. Cosi poi dalle fatture estrapoli i rifornimenti. Dai rifornimenti estrapoli le targhe e i litri, dalle targhe ottieni [Possesso],[Classe] ed i km (che siano quelli a fine mese piuttosto che quelli effettivi tra i vari rifornimenti). Così dovresti avere delle JOIN corrette e non avere i record multipli di cui parlavi, impostando correttamente i filtri.
    Qui forse ho capito che c’è un errore di progettazione di base.
    Nella Tabella Registro Rifornimenti dovrei togliere il campo Targa e inserire il campo NTessera così ho la sicurezza di chi è il fornitore del rifornimento.

    In questo modo posso creare una query e collegare così il NFattura alla Targa

    Registro Rifornimenti è collegato a Anagrafica Tessere dal campo Ntessera, Anagrafica Tessere è collegato a Registro Fatture da FPIva.

    Scusami se sono prolisso, grazie per le tue risposte
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Converrebbe limitare le domande per discussione ad una soltanto.

    Monster88 ha scritto:


    ...come faccio a calcolarmi i km percorsi?
    Faccio una query di selezione per anno targa mese e poi una query a campi incrociati a cui far fare i calcoli?
    Ti lascio un suggerimento ma se non bastasse, apri una nuova discussione. [CODE]Select km - (Select km From Kilometraggio where anno = an And Mese = (me-1) And Targa =ta) From Kilometraggio Where Anno = an And Mese = me And Targa = ta

    Monster88 ha scritto:


    Nella tabella Anagrafica Tessere ho bisogno di associare sia un fornitore che un cliente in quanto nel DB vengono inseriti i rifornimenti di un gruppo di società e ogni società deve avere il suo report.

    Come posso farlo con il tuo consiglio di fare un’unica Anagrafica Societa con i campi Piva e Si/No come chiave primaria?
    Crea prima di tutto due query: una che ottenga l'elenco dei fornitori, l'altra l'elenco dei clienti. Poi nella maschera d'inserimento assicurati che il controllo associato ai campi [FPIva] ed [SPIva] siano caselle combinate. Ora imposti la proprietà "Origine riga" alla rispettiva query. Di nuovo, se qualcosa non è chiaro inizia una nuova discussione.

    Monster88 ha scritto:


    Nella Tabella Registro Rifornimenti dovrei togliere il campo Targa e inserire il campo NTessera così ho la sicurezza di chi è il fornitore del rifornimento.
    È un'ottima idea, ma potrebbe non essere sufficiente. Non mi pare che tu abbia il dettaglio della fattura e io temo che se per qualche motivo un fornitore emette più fatture nello stesso mese, poi ti ritrovi ad avere di nuovo i duplicati. Per avere la certezza, senza importare il dettaglio righe delle fatture, oltre a questo cambio di FK puoi pensare di predisporre un ulteriore campo nel registro dei rifornimenti che riporti l'ID della fattura. Quando un rifornimento viene fatto, lo inserisci e il campo resta NULL. Quando ti arriva la fattura e quindi sai quali rifornimenti riguarda, li associ. Ci sono vari automatismi per farlo, quindi anche se dovessi avere una mole di dati considerevole, non ti spaventare.
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Converrebbe limitare le domande per discussione ad una soltanto.
    Prometto che mi impegnerò a fare così... , il problema è ogni nuova soluzione porta inevitabilmente a nuove domande
    Ti lascio un suggerimento ma se non bastasse, apri una nuova discussione.
    Select km - (Select km From Kilometraggio where anno = an And Mese = (me-1) And Targa =ta)
    From Kilometraggio
    Where Anno = an And Mese = me And Targa = ta
    Grazie, più o meno mi sono fatto un'idea di come fare, provo e al massimo apro una nuova discussione dal titolo : " Come ciclare la stessa operazione per tutti i record di una tabella?"
    Crea prima di tutto due query: una che ottenga l'elenco dei fornitori, l'altra l'elenco dei clienti. Poi nella maschera d'inserimento assicurati che il controllo associato ai campi [FPIva] ed [SPIva] siano caselle combinate. Ora imposti la proprietà "Origine riga" alla rispettiva query. Di nuovo, se qualcosa non è chiaro inizia una nuova discussione.
    Ora è chiaro e mi hai fatto venire un'altra idea, potrei fare un'unica tabella Anagrafica Soggetti e una Tipo Soggetto in cui mettere così da eliminare anche la tabella Anagrafica Autisti.
    È un'ottima idea, ma potrebbe non essere sufficiente. Non mi pare che tu abbia il dettaglio della fattura e io temo che se per qualche motivo un fornitore emette più fatture nello stesso mese, poi ti ritrovi ad avere di nuovo i duplicati.
    Qui visto che le fatture le registro per data pensavo di fare una query che mi filtri i rifornimenti della NTessera <= Data Fattura.
    Per avere la certezza, senza importare il dettaglio righe delle fatture, oltre a questo cambio di FK puoi pensare di predisporre un ulteriore campo nel registro dei rifornimenti che riporti l'ID della fattura.
    Inizialmente avevo inserito FPIva ma il dato mi sembrava ridondante in quanto già associato alla NTessera
    Quando un rifornimento viene fatto, lo inserisci e il campo resta NULL. Quando ti arriva la fattura e quindi sai quali rifornimenti riguarda, li associ. Ci sono vari automatismi per farlo, quindi anche se dovessi avere una mole di dati considerevole, non ti spaventare.
    Mi lasci un suggerimento anche per questo punto?

    Intanto grazie mille per il tempo che mi hai dedicato, testo e metto in pratica i tuoi consigli e suggerimenti e se poi non riesco , aprirò un nuovo argomento
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Monster88 ha scritto:


    Qui visto che le fatture le registro per data pensavo di fare una query che mi filtri i rifornimenti della NTessera <= Data Fattura
    Così però, nel caso di più fatture nello stesso mese, quando cerchi i rifornimenti per la seconda fattura, come distingui quelli già presenti nella prima? Avranno tutti la data minore o uguale alla data della seconda fattura...

    Monster88 ha scritto:


    Inizialmente avevo inserito FPIva ma il dato mi sembrava ridondante in quanto già associato alla NTessera
    Di nuovo, la sola FPIva non è sufficiente, dato che potresti avere più fatture nello stesso mese per la stessa tessera. A te serve collegare le fatture e i rifornimenti 1-M. O lo fai in una tabella dedicata, o estendi la tabella dei rifornimenti ed aggiungi il campo relativo all'ID della fattura.
    Bada che ho scritto ID, e non NumeroFattura, perché può esistere la possibilità che due fornitori emettano lo stesso mese due fatture con data e numero uguali. Quindi dovrà essere tua cura distinguerla in fase di registrazione. Per farlo ti basta appunto un numerico autoincrementale e poi impostare la PK su data, numero e partita iva (per evitare errati inserimenti)

    Monster88 ha scritto:


    Mi lasci un suggerimento anche per questo punto?
    Intanto imbastisci tutto e prova ad associare a mano i record. Poi ci pensiamo. Con questi accorgimenti dovresti ottenere il report per come ti serve.
  • Re: QUERY UNIONE CREA MOLTI RECORD

    Grazie mille. Metto in pratica
Devi accedere o registrarti per scrivere nel forum
9 risposte