SELECT SUM tra due tabelle

di il
19 risposte

SELECT SUM tra due tabelle

Buongiorno,

Ho necessità di ottenere la somma  dei valori dei campi contenuti in due tabelle ( newMovimenti e newMovimentiZERO).

Ho  creato una JOIN 

SELECT SUM(newMovimenti.QuantitaC) AS t FROM newMovimenti LEFT JOIN newMovimentiZERO ON newMovimenti.IdMov = newMovimentiZERO.IdMov 
WHERE  newMovimenti.Azione='IN' And newMovimenti.Codice='123456'
 

Con LEFT JOIN     = solo i risultati della tabella newMovimenti 

Con INNER JOIN  = nessun risultato

con RIGHT JOIN   = nessun risultato

Qualche suggerimento ?

Grazie

19 Risposte

  • Re: SELECT SUM tra due tabelle

    Non ho capito cosa contengono le due tabelle e se hanno campi in comune per quei criteri.

    Left joint significa tutti i record della tabella 1 e i record in comune con la tabella 2

    Inner joint ti dà solo i record in comune tra le due tabelle

    Right joint i record tabella 2 e quelli comuni alla tabella 1 

    Analisi: 

    Left joint ti dà i record della tabella 1 ma non mostra quelli della tabella 2 perché non ci sono corrispondenze in base al criterio

    Inner joint, se non ci sono corrispondenze della tabella 2 e vuoi vedere i corrispondenti della tabella 1 ovvio che hai un insieme vuoto. Perché il criterio è triangoli.

    Terzo caso, dovrebbe mostrare i record della tabella 2 ma hai dato criteri relativi alla tabella 1 perché la tabella 2.non ha triangoli.

    In soldoni

    Tabella 1 triangoli tabella 2 quadrati

    Select bla bla left joint / right joint / inner join bla bla where figura geometrica = triangoli

    Primo caso tutto i triangoli di tabella 1 e i triangoli di tabella 2 risultato solo triangoli (record della tabella 1)

    Secondo caso tutti i triangoli della tabella 2 che sono presenti nella tabella 1 (non ci sono triangoli nella 2 e non mostra nulla e non può mostrare dati della tabella 1 perché la joint vuole i dati lato tabella 2 che ha solo quadrati)

    Terzo caso tutti gli elementi uguali nei due insiemi ma una contiene triangoli e l'altra quadrati... Tu cosa pensi che ti possa mostrare?

  • Re: SELECT SUM tra due tabelle

    Si tratta di un programma per gestire un magazzino.

    Le due tabelle newMovimenti e newMovimentiZERO hanno gli stessi campi.

     il campo quantitaC con Azione=’IN’ della tabella newMovimenti contiene le quantità caricate dell’articolo con relativo codice (articolo) ancora presente in magazzino.

     il campo quantitaC con Azione=’IN’ della tabella newMovimentiZERO contiene le quantità caricate dell’articolo con relativo codice (articolo) non più presente in magazzino (completamento scaricato)

     Volendo calcolare la quantità assoluta caricata nel magazzino dell’articolo devo sommare tutte le quantitaC presenti nelle due tabelle.

     E qui che non riesco a capire perché la JOIN non funziona è mi restituisce solo il valore della tabella newMovimenti.

     Ho provato con:

     LEFT JOIN     = solo i risultati della tabella newMovimenti 

    LEFT OUTER JOIN = solo i risultati della tabella newMovimenti

    INNER JOIN = nessun risultato

    INNER OUTER JOIN = sintax error in operation

    RIGHT JOIN   = nessun risultato

    RIGHT OUTER JOIN   = nessun risultato

     Spero di essere stato chiaro e che soprattutto possa aiutarmi.

    Ancora grazie

  • Re: SELECT SUM tra due tabelle

    25/10/2025 - pierovb ha scritto:

    LEFT JOIN     = solo i risultati della tabella newMovimenti 

    LEFT OUTER JOIN = solo i risultati della tabella newMovimenti

    Tabella 1 {a, b, c, d}

    Tabella 2 {c, z}

    Tabella 1 left joint tabella 2

    Risultato {a, b, c, d}

    Tabella 1 left outlet joint tabella 2

    Risultato {a, b, d}

    Come vedi esclude i comuni ed elenca solo lato tabella 1

    andiamo al magazzino:

    Giornalemagazzino {id, dataregistrazione, datamovimento, articolo, quantità, tipo movimento(carico/scarico), id documento, tipo documento}

    Poi da.sql raggruppi per articolo con carico-scarico e sai quanti ne hai in giacenza.

    Questo gioco delle tre carte che stai facendo non lo capisco... Togli da a e metti su b saranno sempre nella situazione triangoli e quadrati.

    25/10/2025 - pierovb ha scritto:

    ancora presente in magazzino.

    25/10/2025 - pierovb ha scritto:

    non più presente in magazzino (completamento scaricato

    Che significano?

  • Re: SELECT SUM tra due tabelle

    Chiedo scusa 

    ovvio che non funzionava: 

    nella tabella  newMovimentiZERO il campo  IdMov  non ha lo stesso valore del campo IdMov della tabella newMovimenti.

    Perdonatemi sono completamente rinco!!!

  • Re: SELECT SUM tra due tabelle

    Metti le due tabelle con dati fittizi almeno analizzo le.tue sql

  • Re: SELECT SUM tra due tabelle

    25/10/2025 - pierovb ha scritto:

    Le due tabelle newMovimenti e newMovimentiZERO hanno gli stessi campi.

     il campo quantitaC con Azione=’IN’ della tabella newMovimenti contiene le quantità caricate dell’articolo con relativo codice (articolo) ancora presente in magazzino.

     il campo quantitaC con Azione=’IN’ della tabella newMovimentiZERO contiene le quantità caricate dell’articolo con relativo codice (articolo) non più presente in magazzino (completamento scaricato)

    Forse ho capito male, ma se le 2 tabelle sono uguali e vuoi sapere la quantità di articoli in giacenza sommati a quelli già usciti (presumo) allora potresti fare una UNION:

    SELECT MagCompleto.Articolo, Sum(MagCompleto.Giacenza) AS GiacenzaTotale
        FROM
            (SELECT Articolo, Giacenza FROM Mag1 
                UNION 
            SELECT Articolo, Giacenza FROM Mag2)  AS MagCompleto
    GROUP BY MagCompleto.Articolo

    TheTruster

  • Re: SELECT SUM tra due tabelle

    TheTruster

    Ho provato, con scarsi risultati, ad applicare la query da te suggerita.

    alla fine  ho optato per la soluzione di inserire, con due query distinte, i dati sulla stessa Flex ed eseguire all'interno della stessa i calcoli necessari.

     

       Grazie, mi ha fatto molto piacere leggere il tuo post. Non ti sentivo dai tempi di MasterDrive. Anche lì eri sempre disponibile. 

  • Re: SELECT SUM tra due tabelle

    26/10/2025 - pierovb ha scritto:

    mi ha fatto molto piacere leggere il tuo post. Non ti sentivo dai tempi di MasterDrive.

    Grazie! E' vero... è passato parecchio tempo, ma le passioni sono sempre quelle, anche se il tempo è sempre meno.

    26/10/2025 - pierovb ha scritto:

    Ho provato, con scarsi risultati, ad applicare la query da te suggerita.

    Mi piacerebbe se potessi fornire la struttura delle tabelle, così da fare una prova orientata ai tuoi campi.

    TheTruster

  • Re: SELECT SUM tra due tabelle

    Non capisco cosa dovrebbe venire fuori.

    Il codice 340991 ha 2 a magazzino e 8 come rimosso

    Che significa quel Totale 10?

    Giusto per capire.

    In questo caso basta solo la sum delle quanttà  sulla Union raggruppata per articolo.

  • Re: SELECT SUM tra due tabelle

    TheTruster

    DataData/Ora
    OraData/Ora
    nArticoliNumerico
    AzioneTesto
    CausaleTesto
    IdMagaNumerico
    IdMovNumerico
    CodiceTesto
    AreasTesto
    ArticoloTesto
    testConfNumerico
    LottoTesto
    CategoriaTesto
    SettoreTesto
    DittaTesto
    DataScadenzaData/Ora
    nConfNumerico
    nTestNumerico
    QuantitaCNumerico
    QuantitaTNumerico
    UtenteTesto
  • Re: SELECT SUM tra due tabelle

    Sihandrea

    Serve per Calcolare quante confezioni di un determinato articolo sono state ordinate/consumate in un anno e in un determinato mese. Quando la quantità di una confezione è pari a zero viene "spostata" dalla tabella magazzino nella tabella magazzinoZERO ovviamente anche tutti i movimenti di carico/aggiorna/scarico che sono spostati nella tabella movimentiZERO. Tutto ciò per mantenere la tracciabilità. Avrei potuto mettere un campo  in più nelle due tabelle principali e con una flag marcare quelli con confezioni pari a zero, ma non l'ho fatto e ora mi devo arrangiare. 

    Il totale 10 significa che ci sono 2 confezioni in giacenza e 8 sono state caricate e utilizzate.

    La query SUM UNION non sono riuscito ad elaborarla. 

    Tutto sommato mi piace di più questa soluzione finale.

    Ciao e grazie    

  • Re: SELECT SUM tra due tabelle

    26/10/2025 - pierovb ha scritto:

    Sihandrea

    Serve per Calcolare quante confezioni di un determinato articolo sono state ordinate/consumate in un anno e in un determinato mese. 

    Avrei potuto mettere un campo  in più nelle due tabelle principali e con una flag marcare quelli con confezioni pari a zero, ma non l'ho fatto e ora mi devo arrangiare. 

    In realtà la cosa più giusta da fare, e potresti essere ancora in tempo per realizzarla, è utilizzare un'unica tabella dove ti basta registrare l'ID dell'articolo, la quantità, la data dell'evento, il tipo di evento (Carico/Scarico) e altri dati necessari, per esempio l'ID del fornitore, l'ID del cliente etc.

    In questo modo con una semplice query di selezione (o un banale SUM sul campo della quantità) puoi discriminare in base al tipo di evento (Carico/Scarico) la quantità totale Carico+Scarico in un determinato periodo e per ogni ID articolo o per ogni ID Cliente

    In questo modo, secondo me, ti stai complicando inutilmente la vita.

    Riguardo la Query di unione puo realizzarla così come faresti di solito, ma al posto di prendere i dati da un'unica Tabella li prendi dall'UNION di entrambe:

    SELECT MagCompleto.Articolo, Sum(MagCompleto.QuantitaC) AS TotQuantitaC
        FROM (SELECT * FROM newMovimenti UNION SELECT * FROM newMovimentiZERO) AS MagCompleto
    WHERE Month(MagCompleto.Data)=1 AND Year(MagCompleto.Data)=2025 GROUP BY MagCompleto.Articolo

    Questa: (SELECT * FROM newMovimenti UNION SELECT * FROM newMovimentiZERO) AS MagCompleto
    in pratica è la tua tabella e, nella query, si chiamerà MagCompleto.

    In realtà se stai utilizzando Access, potresti creare già direttamente una query di unione, usando quella a mo' di Tabella per fare la tua query, in modo assolutamente identico a come faresti con una "Vista" in un altro DB

  • Re: SELECT SUM tra due tabelle

    In realtà la cosa più giusta da fare, e potresti essere ancora in tempo per realizzarla, è utilizzare un'unica tabella dove ti basta registrare l'ID dell'articolo, la quantità, la data dell'evento, il tipo di evento (Carico/Scarico) e altri dati necessari, per esempio l'ID del fornitore, l'ID del cliente etc.

    Il programma è installato già da diversi  anni in 10 postazioni e gira abbastanza bene. La modifica, giusta, che mi suggerisci  è impraticabile. Dovrei modificare 10 database senza considerare i backup giornalieri ed uno su drive esterno ogni fine settimana. Ho chiesto aiuto per un aggiornamento richiestomi e sinceramente ci sto pensando parecchio prima di effettuare il rilascio. 

    SELECT MagCompleto.Articolo, Sum(MagCompleto.QuantitaC) AS TotQuantitaC
        FROM (SELECT * FROM newMovimenti UNION SELECT * FROM newMovimentiZERO) AS MagCompleto
    WHERE Month(MagCompleto.Data)=1 AND Year(MagCompleto.Data)=2025 GROUP BY MagCompleto.Articolo

     La query funziona alla grande, l'ho provata direttamente nel database l'unico inconveniente è che mi chiede di inserire la data. 

    Come mai? 

  • Re: SELECT SUM tra due tabelle

    TheTruster

    Riprodotta in Visual Basic 

        sSQL = "SELECT newMovimenti.Articolo, Sum(newMovimenti.QuantitaC) AS TotQuantitaC"
        sSQL = sSQL & " FROM (SELECT * FROM newMovimenti UNION SELECT * FROM newMovimentiZERO) AS newMovimenti"
        sSQL = sSQL & " WHERE Data BETWEEN #" & Format(Text1.Text, "mm/dd/yyyy") & " 00:00:00" & "#"
        sSQL = sSQL & " AND #" & Format(Text2.Text, "mm/dd/yyyy") & " 23:59:59" & "# GROUP BY newMovimenti.Articolo"
        Set rs = cn.Execute(sSQL)

    Funziona benissimo :) 

    Ancora Grazie.

Devi accedere o registrarti per scrivere nel forum
19 risposte