Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    11

    Query con somma errata su record

    Risultati duplicati su Query
    Salve a tutti, vi chiedo un aiuto per risolvere un problema nella seguente query:
    SELECT [Semlcons].[ListaMontaggi], [Semlcons].[ListediCarico], [Semlcons].[CodiceArticolo], [Semlcons].[Quantita], [Semlcons].[TabellaOrdine], [Semlcons].[NumeroOrdine], [Semlcons].[ArticoloSpeciale],[COLOR=green][AAesimag_Eu.QtaGiacenzaIniz]+[AAesimag_Eu.QtaCarico_1]+[AAesimag_Eu.QtaCarico_2]+[AAesimag_Eu.QtaCarico_3]+[AAesimag_Eu.QtaCarico_4]+[AAesimag_Eu.QtaCarico_5]+[AAesimag_Eu.QtaCarico_6]+[AAesimag_Eu.QtaCarico_7]+[AAesimag_Eu.QtaCarico_8]+[AAesimag_Eu.QtaCarico_9]+[AAesimag_Eu.QtaCarico_10]+[AAesimag_Eu.QtaCarico_11]+[AAesimag_Eu.QtaCarico_12]-[AAesimag_Eu.QtaScarico_1]-[AAesimag_Eu.QtaScarico_2]-[AAesimag_Eu.QtaScarico_3]-[AAesimag_Eu.QtaScarico_4]-[AAesimag_Eu.QtaScarico_5]-[AAesimag_Eu.QtaScarico_6]-[AAesimag_Eu.QtaScarico_7]-[AAesimag_Eu.QtaScarico_8]-[AAesimag_Eu.QtaScarico_9]-[AAesimag_Eu.QtaScarico_10]-[AAesimag_Eu.QtaScarico_11]-[AAesimag_Eu.QtaScarico_12] AS ESISTENZA_MAG FROM Semlcons, AAesimag_Eu WHERE ((([Semlcons].[ListaMontaggi]) Like [forms]!Maschera1!LISMONT) And (([Semlcons].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*") And (([AAesimag_Eu].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*") And (([AAesimag_Eu].[Anno])=11)) ORDER BY [Semlcons].[CodiceArticolo];

    Il risultato di tale query dovrebbe essere
    ListaMontaggi ListediCarico CodiceArticolo Quantita TabellaOrdine NumeroOrdine ArticoloSpeciale ESISTENZA_MAG
    ZMER E09 4FD2001/FW 1 11 9748 0 59
    ZMER E11 4FD2001/FW 1 11 9877 0 59

    e invece è
    ListaMontaggi ListediCarico CodiceArticolo Quantita TabellaOrdine NumeroOrdine ArticoloSpeciale ESISTENZA_MAG
    ZMER E09 4FD2001/FW 1 11 9748 0 0
    ZMER E09 4FD2001/FW 1 11 9748 0 59
    ZMER E11 4FD2001/FW 1 11 9877 0 0
    ZMER E11 4FD2001/FW 1 11 9877 0 59

    Sono convinto che il problema sia di semplice soluzione ma non riesco a trovarlo...

    Grazie

    Alb

  2. #2
    -------------------------------------
    indica - come da regolamento, questo sconosciuto... - il db col quale stai lavorando, grazie
    -------------------------------------

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    11
    Chiedo scusa, sto lavorando con SQL di Access...

    Grazie

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    SELECT

    [Semlcons].[ListaMontaggi],
    [Semlcons].[ListediCarico],
    [Semlcons].[CodiceArticolo],
    [Semlcons].[Quantita],
    [Semlcons].[TabellaOrdine],
    [Semlcons].[NumeroOrdine],
    [Semlcons].[ArticoloSpeciale],

    [COLOR=green]

    [AAesimag_Eu.QtaGiacenzaIniz]+
    [AAesimag_Eu.QtaCarico_1]+
    [AAesimag_Eu.QtaCarico_2]+
    [AAesimag_Eu.QtaCarico_3]+
    [AAesimag_Eu.QtaCarico_4]+
    [AAesimag_Eu.QtaCarico_5]+
    [AAesimag_Eu.QtaCarico_6]+
    [AAesimag_Eu.QtaCarico_7]+
    [AAesimag_Eu.QtaCarico_8]+
    [AAesimag_Eu.QtaCarico_9]+
    [AAesimag_Eu.QtaCarico_10]+
    [AAesimag_Eu.QtaCarico_11]+
    [AAesimag_Eu.QtaCarico_12]-
    [AAesimag_Eu.QtaScarico_1]-
    [AAesimag_Eu.QtaScarico_2]-
    [AAesimag_Eu.QtaScarico_3]-
    [AAesimag_Eu.QtaScarico_4]-
    [AAesimag_Eu.QtaScarico_5]-
    [AAesimag_Eu.QtaScarico_6]-
    [AAesimag_Eu.QtaScarico_7]-
    [AAesimag_Eu.QtaScarico_8]-
    [AAesimag_Eu.QtaScarico_9]-
    [AAesimag_Eu.QtaScarico_10]-
    [AAesimag_Eu.QtaScarico_11]-
    [AAesimag_Eu.QtaScarico_12]
    AS ESISTENZA_MAG

    FROM
    Semlcons, AAesimag_Eu

    WHERE
    (
    (([Semlcons].[ListaMontaggi]) Like [forms]!Maschera1!LISMONT)
    And
    (([Semlcons].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*")
    And
    (([AAesimag_Eu].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*")
    And
    (([AAesimag_Eu].[Anno])=11)
    )

    ORDER BY [Semlcons].[CodiceArticolo]

    ;
    Quel " [COLOR=green] " scritto nella 9° riga della tua
    query mi sembra strano
    ( ma nel forum ho imparato tante cose che
    all'inizio sembravano strane e poi sono state utili )
    __________________________________________________ ______________

    Prova a mandarci:

    Nome tabelle
    Nome campi
    Pochi record di esempio
    e quello che vorresti ottenere



    Grazie

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Lo ho cancellato perche erroneamente ho postato
    2 volte la stessa risposta


  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    11
    Grazie per i consigli. Allora, il [COLOR=green] penso sia stato inserito dal forum, nella query originale non c'è...
    Le due tabelle sono Semlcons e AAesimag_Eu.
    I campi da selezionare dalla prima tabella sono [ListaMontaggi],[ListediCarico],[CodiceArticolo],[Quantita],[TabellaOrdine],[NumeroOrdine],[ArticoloSpeciale].
    L'ultimo campo è invece la somma di vari campi della tabella AAesimag_Eu per l'articolo con codice [CodiceArticolo].
    ESEMPIO RECORD Semlcons
    C94 C94 4FR1234 5 11 10000 7
    C87 C87 4FR4567 3 11 11234 0

    ESEMPIO RECORD AAesimag_Eu
    4FR1234 3 4 7 9 8 10 14 1 14 ...

    Il risultato che vorrei ottenere è
    C94 C94 4FR1234 5 11 10000 7 72 (quest'ultimo campo dovrebbe essere la somma dei campi della tabella AAesimag_Eu (3+4+7+9+8+10+14+1+14))

    invece ottengo
    C94 C94 4FR1234 5 11 10000 7 0
    C94 C94 4FR1234 5 11 10000 7 72
    come se la query venisse eseguita due volte, una senza eseguire la somma dell'ultimo campo e una correttamente.

    Spero di essere stato abbastanza chiaro...

    Grazie ancora

    Alberto

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    A parer mio la tua query ha 2 problemi:

    __________________________________________________ _____

    1° Non hai fatto un join fra le tabelle
    pertanto i record si moltiplicano in modo esponenziale

    Tu parli solo di raddoppio ma a parer mio hai provato solo
    con 2 record

    se provi con 100 record te ne risultano 10.000

    __________________________________________________ ______


    2° Non hai usato la funzione "nz" ( null to 0 )

    Se fai una somma sottrazione moltiplicazione ecc
    fra dei numeri e uno qualunque di questi è nullo
    Il risultato sara sempre e comunque un valore nullo

    per ovviare a questo devi usare il "nz" che ti trasforma i
    numeri vuoti in 0

    nz([Campo],0)
    fa 0 se Campo = null
    fa 0 se Campo = 0
    fa 9 se Campo = 9

    __________________________________________________ ___


    Poi c'e ancora qualcosa che mi sfugge nel risultato
    che esponi !!!!!!

    Comunque prova questa query e fammi sapere se non va

    codice:
    SELECT 
    
    [Semlcons].[ListaMontaggi], 
    [Semlcons].[ListediCarico], 
    [Semlcons].[CodiceArticolo], 
    [Semlcons].[Quantita], 
    [Semlcons].[TabellaOrdine], 
    [Semlcons].[NumeroOrdine], 
    [Semlcons].[ArticoloSpeciale], 
    
    nz([AAesimag_Eu.QtaGiacenzaIniz],0)+
    nz([AAesimag_Eu.QtaCarico_1],0)+
    nz([AAesimag_Eu.QtaCarico_2],0)+
    nz([AAesimag_Eu.QtaCarico_3],0)+
    nz([AAesimag_Eu.QtaCarico_4],0)+
    nz([AAesimag_Eu.QtaCarico_5],0)+
    nz([AAesimag_Eu.QtaCarico_6],0)+
    nz([AAesimag_Eu.QtaCarico_7],0)+
    nz([AAesimag_Eu.QtaCarico_8],0)+
    nz([AAesimag_Eu.QtaCarico_9],0)+
    nz([AAesimag_Eu.QtaCarico_10],0)+
    nz([AAesimag_Eu.QtaCarico_11],0)+
    nz([AAesimag_Eu.QtaCarico_12],0)-
    nz([AAesimag_Eu.QtaScarico_1],0)-
    nz([AAesimag_Eu.QtaScarico_2],0)-
    nz([AAesimag_Eu.QtaScarico_3],0)-
    nz([AAesimag_Eu.QtaScarico_4],0)-
    nz([AAesimag_Eu.QtaScarico_5],0)-
    nz([AAesimag_Eu.QtaScarico_6],0)-
    nz([AAesimag_Eu.QtaScarico_7],0)-
    nz([AAesimag_Eu.QtaScarico_8],0)-
    nz([AAesimag_Eu.QtaScarico_9],0)-
    nz([AAesimag_Eu.QtaScarico_10],0)-
    nz([AAesimag_Eu.QtaScarico_11],0)-
    nz([AAesimag_Eu.QtaScarico_12],0) 
    AS ESISTENZA_MAG
    
    FROM Semlcons INNER JOIN AAesimag_Eu ON Semlcons.CodiceArticolo=AAesimag_Eu.CodiceArticolo
    
    ORDER BY [Semlcons].[CodiceArticolo]
    
    ;

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Sto riguardando la clausola "WHERE" che hai scritto nel tuo primo post
    WHERE
    (
    (([Semlcons].[ListaMontaggi]) Like [forms]!Maschera1!LISMONT)
    And
    (([Semlcons].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*")
    And
    (([AAesimag_Eu].[CodiceArticolo]) Like [forms]![Maschera1]!CODART & "*")
    And
    (([AAesimag_Eu].[Anno])=11)
    )
    Perche hai messo 2 volte "CodiceArticolo" i valori sono relazionati
    e sufficiente solo 1 volta
    L'ultimo campo è invece la somma di vari campi della tabella AAesimag_Eu per l'articolo con codice [CodiceArticolo].

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    11
    Grazie mille, il problema era proprio quello. Visto che sei stato così gentile ti chiedo un'ultima cosa: al lancio della query mi capita spesso l'errore "ODBC:Chiamata non riuscita".
    Esiste per caso un modo per eliminare/limitare tale errore?

    Grazie ancora

    Alb

  10. #10
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Chiamata non riuscita indica il mancato o insufficiemte collegamento al Server


    Puo significare che :

    __a) Il server è spento
    __b) Il server e troppo occupato
    __c) La rete è occupata
    __d) La query deve restituire molte righe
    __e) La query deve restituire poche righe
    ma sono il prodotto di molte righe che dal server scendono verso il client
    __f) Eccetera


    Per ridurre il problema devi verificare il carico del server
    Verificare che in rete non ci siano download selvaggi di musica film o altro
    Migliorare la query

    __________________________________________________ __________


    Per migliorare la query intendo che se hai 2 tabelle di 10.000 record cad
    e ne devi estrarre 8 record

    Se esegui la query nel server devono transitare in rete 8 record
    Se esegui la query nel client devono transitare in rete 20.000 record

    __________________________________________________ ______________

    Devi anche considerare gli indici di SQL

    Se usi dei parametri e bene che quei campi siano indicizzati

    __________________________________________________ ______

    Come ultima possibilita c'è un timer fra le impostazioni del server
    ( SQLServer ) che regola il tempo di esecuzione delle query.

    Ma in questo momento non ricordo dove sia

    A parer mio la regolazione del timer non è necessaria
    in quanto è gia di default abbastanza lungo da consentire
    buoni collegamenti non solo in rete ma anche
    su DB remoti connessi via Internet

    __________________________________________________ __________




Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.