Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    6

    Gestione duplicati in tabella Access

    CIao a tutti mi chiamo Danilo ed ho un problema sulla gestione di un database Access con doppioni.
    Praticamente ho una tabella composta da 5 colonne (A,B,C,D,E) e da righe "x". Nella colonna "A" sono presenti dei duplicati che devono essere rimossi, ma al contempo il corrispondente valore nella colonna "D" deve essere sommato in modo da creare un unico valore. Il tutto non considerando i valori "#" presenti nella colonna A i quali non dovranno essere considerati come doppioni. Di seguito un esempio:
    Dado Meccanico MAG2 3
    Anello Meccanico MAG1 8
    Anello Meccanico MAG1 6
    Dado Meccanico MAG2 2
    Anello Meccanico MAG1 5
    # Strumentale MAG3 2
    # Strumentale MAG3 4

    Dado Meccanico MAG2 7
    Anello Meccanico MAG1 14
    # Strumentale MAG3 2
    # Strumentale MAG3 4

    AIUTO!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    per evitare problemi,

    1.fai copia del database e conservala, puoi riprenderla in caso di guai

    2.crea una nuova tabella con la stessa struttura di quella che devi "sommare"

    3.somma e copia i doppi escludendo #
    codice:
    insert into NUOVA ( colA, colB, colC, colD, colE )
    select colA, colB, colC, sum(colD), colE
    from DOPPIONI
    where colA<>"#"
    group by colA, colB, colC, colE
    4.copia solo #
    codice:
    insert into NUOVA ( colA, colB, colC, colD, colE )
    select colA, colB, colC, colD, colE
    from DOPPIONI
    where colA="#"
    attenzione : quando hai controllato bene il risultato nella tabella nuova e sei sicuro che tutto sia a posto,

    5.svuoti la tabella dei doppioni
    codice:
    delete from DOPPIONI
    6. copia della tabella nuova nella doppioni svuotata
    codice:
    insert into DOPPIONI ( colA, colB, colC, colD, colE )
    select colA, colB, colC, colD, colE
    from NUOVA
    7. verifica che la copia sia corretta

    8. cancella la tabella nuova

    9.compatta il database

    se hai difficoltà con
    codice:
    where colA<>"#" 
    e 
    where colA="#"
    puoi usare rispettivamente,
    codice:
    where Instr(1, colA, "#")>0
    e
    where Instr(1, colA, "#")=0
    è un modo di agire prudente,
    se hai problemi, ripristina la copia del database fatta al punto 1
    Ultima modifica di marino51; 17-02-2015 a 22:38

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    6
    Grazie per la risposta ma non ho ben capito.
    Praticamente devo:
    Creare una tabella con le stesse colonne e stesse intestazioni;
    Creare una nuova Query;
    Aprire la Query in visualizzazione SQL;
    Copiare i comandi che mi hai postato rinominando con il nome dei campi di mio interesse;

    Però non c'è il collegamento con la tabella di origine...mi sto perdendo. Potresti cortesemente dettagliare meglio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    scusa una rettifica, ero concentrato sulla sicurezza del processo e mi è scappata un'inversione con copia/incolla

    se hai difficoltà con
    codice:
    codice:
    where colA<>"#" 
    e 
    where colA="#"
    puoi usare rispettivamente,
    codice:
    codice:
    where Instr(1, colA, "#")=0
    e
    where Instr(1, colA, "#")>0
    non mi è parso di leggere il nome della tabella nel tuo primo post per cui nelle mie query ho chiamato la tabella
    con il nome DOPPIONI, tu sostituisci in modo appropriato il nome, così come dovrai sostituire nelle mie query il nome delle colonne

    poi ti ho indicato 9 punti da seguire per ESCLUDERE problemi,
    prova a seguirli, magari su un database copia prima che sull'originale

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    6
    Buongiorno,
    Sto seguendo passo passo le istruzioni ma ci deve essere un errore.

    Supponendo che:
    Tabella di origine=T_ACCODAMENTO FOGLI MAGAZZINO
    Nuova tabella=T_ACCODAMENTO FOGLI MAGAZZINO SENZA DOPPIONI
    Colonna A=Partner Number
    Colonna B=Descrizione
    Colonna C=Codice Costruttore
    Colonna D=Stock Util Libero
    Colonna E=Foglio

    Si avrà quindi:

    insert into T_ACCODAMENTO FOGLI MAGAZZINO SENZA DOPPIONI (Partner Number, Descrizione, Codice Costruttore, Stock Util Libero, Foglio )
    select Partner Descrizione, Descrizione, Codice Costruttore, sum(Stock Util Libero), Foglio
    from T_ACCODAMENTO FOGLI MAGAZZINO
    where Partner Number <>"#"
    group by Partner Number, Descrizione, Codice Costruttore, Foglio


    L'errore è : Errore di sintassi nell'istruzione INSERT INTO

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    non la ho guardata nel dettaglio,
    ma sicuramente devi racchiudere fra parentesi quadre i nomi di campi
    e tabelle che contengono spazi o caratteri speciali.

    meglio sarebbe rinominarli all'origine ......

    .

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    come detto, racchiudi tutti i nomi dei campi tra parentesi quadre,

    è una pessima idea nominare i campi lasciando spazi tra parole, ma tant'è

    poi usa la soluzione where con in

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    6
    Di seguito il comando corretto:
    INSERT INTO [T_ACCODAMENTO FOGLI MAGAZZINO SENZA DOPPIONI] ( [Partner Number], Descrizione, [Codice Costruttore], [Stock Util Libero], Foglio )
    SELECT [Partner Number], Descrizione, [Codice Costruttore], sum([Stock Util Libero]), Foglio
    FROM [T_ACCODAMENTO FOGLI MAGAZZINO]
    WHERE [Partner Number]<>"#"
    GROUP BY [Partner Number], Descrizione, [Codice Costruttore], Foglio;

    lanciando la query sembra che mi prenda e mi riporti nella tabella [T_ACCODAMENTO FOGLI MAGAZZINO SENZA DOPPIONI] solo i doppioni e me li moltiplichi per due. Ad esempio nella tab di origine ho:

    Partner Number Descrizione Codice Costruttore Stock Util Libero Foglio
    186806-1 LUBE OIL TANK FILTER PER T 1402 4 Materilali MAI a SAP
    186806-1 BADILE
    0 Materiali a Commessa
    186806-1 186806-1 FILTER ELEMENT FIBERGLASS MEDI
    0 Materiali a Commessa


    nella tabella di destinazione ho

    Partner Number Descrizione Codice Costruttore Stock Util Libero Foglio
    186806-1 LUBE OIL TANK FILTER PER T 1402 4 Materilali MAI a SAP
    186806-1 BADILE
    0 Materiali a Commessa
    186806-1 186806-1 FILTER ELEMENT FIBERGLASS MEDI
    0 Materiali a Commessa
    186806-1 LUBE OIL TANK FILTER PER T 1402 4 Materilali MAI a SAP
    186806-1 BADILE
    0 Materiali a Commessa
    186806-1 186806-1 FILTER ELEMENT FIBERGLASS MEDI
    0 Materiali a Commessa

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    nel precedente post, scrissi,
    poi usa la soluzione where con in

    solo i doppioni e me li moltiplichi per due
    la query non è fatta per moltiplicare per due, anzi è fatta per raggruppare, sommando ...
    prima di ogni esecuzione della query accertati che la tabella di destinazione sia vuota

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    6
    Sostituendo WHERE con IN mi esce il seguente errore " Errore di sintassi nella clausola FROM"

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.