+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Confronto sum group by tra due tabelle

  1. #1
    salve .. sono alle prese con una query e non so proprio da dove partire.
    Ho due tabelle : fatt_confronto e fatt_temp
    le tabelle sono uguali

    Sia nella tabella fatt_confronto che fatt_temp
    ho i campi id_articoli (possono essere duplicati) e quantita_prodotto
    Es.
    fatt_confronto.id_articoli .. fatt_confronto.quantita_prodotto = 7
    fatt_confronto.id_articoli .. fatt_confronto.quantita_prodotto = 5
    MENTRE
    fatt_temp.id_articoli .. fatt_confronto.quantita_prodotto = 10
    fatt_temp.id_articoli .. fatt_confronto.quantita_prodotto = 5

    Vorrei implemetare una query che mi facesse la somma con group by id_articoli di ambedue le tabelle e
    verificare se la somma di una tabella è maggiore della somma dell'altra
    codice HTML:
    Using cmd As New SqlCommand("Select fatt_confronto .ID_ARTICOLI, Sum(fatt_confronto .QUANTITA_PRODOTTO) As QUANTITA_PRODOTTO_CONFRONTO" _
                            & " GROUP BY fatt_confronto .ID_ARTICOLI" _
                            & " fatt_temp.ID_ARTICOLI Sum(fatt_temp.QUANTITA_PRODOTTO) As QUANTITA_PRODOTTO_TEMP" _
                            & " GROUP BY fatt_temp.ID_ARTICOLI" _
                            & " FROM fatt_confronto ,fatt_temp " _
                            & " WHERE QUANTITA_PRODOTTO_CONFRONTO > @QUANTITA_PRODOTTO_TEMP", CONNESSIONE_AL_DB)
    
                Dim DR As SqlDataReader = cmd.ExecuteReader
    
                DR.Read()
    
                MessageBox.Show(DR(".....").ToString)
    
    
                DR.Close()
                DR = Nothing
            End Using
    So che dovrei innestarle con delle join ma non so come fare
    Mi potreste dare qualche dritta
    Grazie Peppe Santagata

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da peppesantagata Visualizza il messaggio
    So che dovrei innestarle con delle join ma non so come fare
    Puoi iniziare a studiarli da qui:
    SQL Server Basics
    https://www.sqlservertutorial.net/sql-server-basics/
    ℹ️ Leggi di più su gibra ...

  3. #3
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Puoi iniziare a studiarli da qui:
    SQL Server Basics
    https://www.sqlservertutorial.net/sql-server-basics/
    Using cmd As New SqlCommand(" Select P.ID_ARTICOLI, Sum(P.QUANTITA_PRODOTTO) As QUANTITA_PRODOTTO_CONFRONTO" _
    & " FROM fatt_confronto AS P " _
    & " INNER JOIN " _
    & " (Select fatt_temp.ID_ARTICOLI ,Sum(fatt_temp.QUANTITA_PRODOTTO) As QUANTITA_PRODOTTO_TEMP" _
    & " FROM fatt_temp " _
    & " GROUP BY fatt_temp.ID_ARTICOLI) as SUB " _
    & " ON P.ID_ARTICOLI = SUB.ID_ARTICOLI" _
    & " GROUP BY P.ID_ARTICOLI", CONNESSIONE_AL_DB)

    Dim DR As SqlDataReader = cmd.ExecuteReader

    DR.Read()

    MessageBox.Show(DR("QUANTITA_PRODOTTO_CONFRONTO"). ToString)

    DR.Close()
    DR = Nothing
    End Using

    così riesco ad avere la somma QUANTITA_PRODOTTO_CONFRONTO ma non riesco ad avere come risultato quando
    QUANTITA_PRODOTTO_CONFRONTO > QUANTITA_PRODOTTO_TEMP
    mi potreste dare indicazioni

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Stai facendo un JOIN ma non hai previsto che devi farti restituire ENTRAMBI i valori:
    - QUANTITA_PRODOTTO_CONFRONTO
    - QUANTITA_PRODOTTO_TEMP
    Altrimenti come fai a confrontarli?

    Non capisco perché tu abbia usato una sub-query
    FROM (SELECT ....

    Puoi fare un JOIN diretto:
    SELECT 
        t1.ID_Articolo, Sum(t1.QUANTITA_PRODOTTO) AS QtaProdConf, Sum(t2.QUANTITA_PRODOTTO) AS QtaProdTemp
    FROM 
        fatt_confronto AS t1 INNER JOIN fatt_temp AS t2 ON t1.ID_Articolo=t2.ID_Articolo
    GROUP BY 
        t1.ID_Articolo
    
    In modo che ti restituisca una 'tabella' così:
    IDArticolo, QtaProdConf, QtaProdTemp


    Una volta fatta questa e verificata, devi utilizzare la tua query come una sub-query che esegue il confronto:

    SELECT 
        IDArticolo, QtaProdConf, QtaProdTemp,
        IIF(QtaProdConf > QtaProdTemp, "maggiore", "minore") AS Confronto
    FROM 
    (
    tua query sopra
    )
    
    P.S. Ho scritto al volo, per cui potrei aver commesso errori. Controlla.
    ℹ️ Leggi di più su gibra ...

  5. #5
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Stai facendo un JOIN ma non hai previsto che devi farti restituire ENTRAMBI i valori:
    - QUANTITA_PRODOTTO_CONFRONTO
    - QUANTITA_PRODOTTO_TEMP
    Altrimenti come fai a confrontarli?

    Non capisco perché tu abbia usato una sub-query
    FROM (SELECT ....

    Puoi fare un JOIN diretto:
    SELECT 
        t1.ID_Articolo, Sum(t1.QUANTITA_PRODOTTO) AS QtaProdConf, Sum(t2.QUANTITA_PRODOTTO) AS QtaProdTemp
    FROM 
        fatt_confronto AS t1 INNER JOIN fatt_temp AS t2 ON t1.ID_Articolo=t2.ID_Articolo
    GROUP BY 
        t1.ID_Articolo
    
    In modo che ti restituisca una 'tabella' così:
    IDArticolo, QtaProdConf, QtaProdTemp


    Una volta fatta questa e verificata, devi utilizzare la tua query come una sub-query che esegue il confronto:

    SELECT 
        IDArticolo, QtaProdConf, QtaProdTemp,
        IIF(QtaProdConf > QtaProdTemp, "maggiore", "minore") AS Confronto
    FROM 
    (
    tua query sopra
    )
    
    P.S. Ho scritto al volo, per cui potrei aver commesso errori. Controlla.
    Salve effettivamente come dicevo in precedenza mi sono perso

    ho preparato la query in questo modo

    Using cmd As New SqlCommand(" Select Sum(T1.QUANTITA_PRODOTTO) As QUANTITA_PRODOTTO_CONFRONTO,sum(T2.QUANTITA_PRODOT TO) As QUANTITA_PRODOTTO_TEMP" _
    & " FROM FATTURA_USCITA_MERCE_CONFRONTO_PRODOTTI_TEMP as T1 INNER Join FATTURA_USCITA_MERCE_PRODOTTI_TEMP As T2" _
    & " On T1.ID_ARTICOLI = T2.ID_ARTICOLI" _
    & " GROUP BY T1.ID_ARTICOLI", CONNESSIONE_AL_DB)

    Dim DR As SqlDataReader = cmd.ExecuteReader

    Do While DR.Read

    MessageBox.Show("DA QUANTITA_PRODOTTO_CONFRONTO - " & " - " & DR("QUANTITA_PRODOTTO_CONFRONTO").ToString)
    MessageBox.Show("DA QUANTITA_PRODOTTO_TEMP - " & " - " & DR("QUANTITA_PRODOTTO_TEMP").ToString)

    Loop
    DR.Close()
    DR = Nothing

    End Using

    ma non comprendo perchè quando ottengo il risultato la sum si raddoppia

    esempio
    nella tabella FATTURA_USCITA_MERCE_CONFRONTO_PRODOTTI_TEMP (T1) HO
    Per ID_ARTICOLI 3 la quantità è 4
    Per ID_ARTICOLI 3 la quantità è 3

    La somma dovrebbe essere 7 ed invece mi raddoppia (risultato 14)
    Ciò mi accade anche nella tabella FATTURA_USCITA_MERCE_PRODOTTI_TEMP

    Per ID_ARTICOLI 3 la quantità è 5
    Per ID_ARTICOLI 3 la quantità è 4

    La somma dovrebbe essere 9 ed invece mi raddoppia (risultato 18)

    chiedo venia ma dove sbaglio
    Grazie Peppe

  6. Ciao,

    non hai detto di che dbms si tratta ,
    ma fossi in te, come punto di partenza userei questa query
    ammesso il dbms supporti il FULL JOIN ed isnull;

    se non lo supporta tieni presente che un full join è 'contemporaneamente' sia un left che un right join


    select q1.*, q2.* 
    from
    (
    	select ID_ARTICOLI, Sum(QUANTITA_PRODOTTO) as QUANTITA_PRODOTTO_CONFRONTO
    	from fatt_confronto 
    	group BY ID_ARTICOLI
    ) as q1
    full join
    (
    	Select ID_ARTICOLI ,Sum(QUANTITA_PRODOTTO) as QUANTITA_PRODOTTO_TEMP
    	from fatt_temp 
    	group ID_ARTICOLI
    ) as q2 
    on q1.ID_ARTICOLI = q2.ID_ARTICOLI
    where isnull(q1.QUANTITA_PRODOTTO_CONFRONTO,-1) <> isnull(q2.QUANTITA_PRODOTTO_TEMP,-2)
    
    HTH
    ℹ️ Leggi di più su sspintux ...

  7. #7
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    ciao,

    non hai detto di che dbms si tratta ,
    ma fossi in te, come punto di partenza userei questa query
    ammesso il dbms supporti il full join ed isnull;

    se non lo supporta tieni presente che un full join è 'contemporaneamente' sia un left che un right join


    select q1.*, q2.* 
    from
    (
    	select id_articoli, sum(quantita_prodotto) as quantita_prodotto_confronto
    	from fatt_confronto 
    	group by id_articoli
    ) as q1
    full join
    (
    	select id_articoli ,sum(quantita_prodotto) as quantita_prodotto_temp
    	from fatt_temp 
    	group id_articoli
    ) as q2 
    on q1.id_articoli = q2.id_articoli
    where isnull(q1.quantita_prodotto_confronto,-1) <> isnull(q2.quantita_prodotto_temp,-2)
    
    hth
    sql express 2019

  8. #8
    Quote Originariamente inviato da peppesantagata Visualizza il messaggio
    sql express 2019
    Grazie ... oggi ho imparato full join che non avevo mai usato
    Ringrazio anche Gibra

    Sembra che vada proprio bene

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. confronto fra tabelle
    Da frugo nel forum Microsoft Access
    Risposte: 10
    Ultimo Post: 28-08-2014, 06:04
  2. Confronto Tabelle
    Da Lorenzo Gallo nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 09-07-2012, 10:15
  3. confronto fra tabelle
    Da orangotango nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 17-11-2010, 19:31
  4. Confronto campi tra due tabelle
    Da John nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 09-05-2007, 19:30
  5. Confronto Valori tra due tabelle
    Da pinius nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 27-12-2005, 15:05