Selezione Record in base al Valore dei Campi

mercoledì 21 maggio 2014 - 13.16

leonardo1968 Profilo | Newbie

Salve, sono un nuovo iscritto e mi chiamo Leonardo.
Premetto che non ho quasi nessuna conoscenza di Access.
Il mio problema è il seguente:
Devo elaborare e ripulire una grande quantità di dati, circa 700.000 record con 5 campi.
Attualmente ho sviluppato il tutto in Excel ed utilizzando una lunga serie di Macro, riesco a elaborare tutto quello di cui necessito. Il problema è la pesantezza. Essendo una grossa quantità di dati, Excel, spesso, si blocca e non va avanti.
Vorrei provare a realizzare il tutto in Access ma sono mancante delle basi, figuriamoci il resto!

In Access importo dei dati in una tabella, da un file esterno.
La tabella è composta da ID, Campo1, Campo2, Campo3, Campo4 e Campo5

Il Campo1 è un campo ORA (hh:mm:ss)
Il Campo2 è un campo DATA (dd:mm:hhhh)
Il Campo3 è un campo TESTO
Il Campo4 è un campo TESTO
Il Campo5 è un campo TESTO



dovrei creare una nuova tabella analizzando i dati della tabella importata, in questo modo:

Creare un nuova tabella che contenga i campi 1, 2, 3, 4, 5 della tabella importata facendo il seguente controllo:

Esempio:Se il Campo3="A" e il Campo4="0" e il Campo3 del record successivo ="B" e il Campo4 del record successivo ="1" o Se il Campo3="B" e il Campo4="1" e il Campo3 del record precedente ="A" e il Campo4 del record precedente ="0" o Se ....ecc....copia i campi 1, 2, 3, 4, 5 nella nuova tabella altrimenti no.

Ovviamente come detto precedentemente le variabili non sono solo 2 come nell esempio ma circa 85.

Spero di essere stato chiaro e che qualcuno di voi possa dedicarmi un po del proprio tempo per tentare di risolvere il mio problema.
Grazie in anticipo
Leonardo
Ah dimenticavo, la versione di Access che utilizzo è la 2010.

alx_81 Profilo | Guru

>Salve, sono un nuovo iscritto e mi chiamo Leonardo.
ciao Leonardo, benvenuto su dotnethell.it!

>Premetto che non ho quasi nessuna conoscenza di Access.
Questo purtroppo non aiuta, il forum non riesce a formarti ed alcune conoscenze sono condizione necessaria per proseguire con le risposte.

>Ovviamente come detto precedentemente le variabili non sono solo 2 come nell esempio ma circa 85.
Quello che indichi sembra qualcosa che è gestibile con un programma (devi andare sui record successivi e tornare al corrente).
Ma non è per nulla semplice farlo qui. Ho paura che dovrai iniziare da solo e cercare di ricavare qualcosa studiandoti access, perchè aiutarti diventa veramente difficile così.

>Spero di essere stato chiaro e che qualcuno di voi possa dedicarmi
>un po del proprio tempo per tentare di risolvere il mio problema.
Come ti dicevo, quello che ti serve è un vero e proprio programma di trasformazione dati, e dubito che riusciremo ad arrivarci in fondo qui.
Intanto inizia a disegnarti le query che estrapolano i record su cui devi lavorare. Di più non saprei che dirti.

>Grazie in anticipo
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

leonardo1968 Profilo | Newbie

Salve, allora, potrei aver trovato la solozione, appena è confermata ve la posto, nel frattempo avrei bisogno di un'altro consiglio:
ho la seguente tabella
ID ORA DATA LOOP OTL TRAM PERCORRENZA
1 5.46.10 01/03/2014 01.201.7 0 1
2 5.46.35 01/03/2014 01.001.1 1 1
3 5.46.37 01/03/2014 01.001.1 0 1
4 5.46.49 01/03/2014 01.001.3 1 1
5 5.46.51 01/03/2014 01.001.3 0 1
6 5.47.52 01/03/2014 01.003.1 1 1
7 5.47.54 01/03/2014 01.003.1 0 1
8 5.48.38 01/03/2014 01.003.3 1 1
9 5.48.39 01/03/2014 01.003.3 0 1
10 5.48.51 01/03/2014 01.004.3 1 1

dovrei mettere nel campo PERCORRENZA la differenza di orario tra i campo ORA del record 2 e il campo ORA del record 1, cioè 5.46.35 - 5.46.10 = 0.00.25

avrei trovato la seguente soluzione:

Ho costruito una query di selezione con questo codice:
SELECT SELEZIONE_LOOP_SMN.ID, SELEZIONE_LOOP_SMN.ORA, SELEZIONE_LOOP_SMN.DATA, SELEZIONE_LOOP_SMN.LOOP, SELEZIONE_LOOP_SMN.OTL, SELEZIONE_LOOP_SMN.TRAM, SELEZIONE_LOOP_SMN1.ORA, SELEZIONE_LOOP_SMN1.DATA, SELEZIONE_LOOP_SMN1.LOOP, SELEZIONE_LOOP_SMN1.OTL, SELEZIONE_LOOP_SMN1.TRAM, IIf((SELEZIONE_LOOP_SMN.ORA)>(SELEZIONE_LOOP_SMN1.ORA),([SELEZIONE_LOOP_SMN.ORA]-[SELEZIONE_LOOP_SMN1.ORA]),"") AS Risultato
FROM SELEZIONE_LOOP_SMN AS SELEZIONE_LOOP_SMN LEFT JOIN SELEZIONE_LOOP_SMN AS SELEZIONE_LOOP_SMN1 ON SELEZIONE_LOOP_SMN.ID= SELEZIONE_LOOP_SMN1.ID+1;

che mi restituisce una tabella così formata:

ID SELEZIONE_LOOP_SMN.ORA SELEZIONE_LOOP_SMN.DATA SELEZIONE_LOOP_SMN.LOOP SELEZIONE_LOOP_SMN.OTL SELEZIONE_LOOP_SMN.TRAM SELEZIONE_LOOP_SMN1.ORA SELEZIONE_LOOP_SMN1.DATA SELEZIONE_LOOP_SMN1.LOOP SELEZIONE_LOOP_SMN1.OTL SELEZIONE_LOOP_SMN1.TRAM Risultato
1 5.46.10 01/03/2014 01.201.7 0 1
2 5.46.35 01/03/2014 01.001.1 1 1 5.46.10 01/03/2014 01.201.7 0 1 25
3 5.46.37 01/03/2014 01.001.1 0 1 5.46.35 01/03/2014 01.001.1 1 1 2
4 5.46.49 01/03/2014 01.001.3 1 1 5.46.37 01/03/2014 01.001.1 0 1 12
5 5.46.51 01/03/2014 01.001.3 0 1 5.46.49 01/03/2014 01.001.3 1 1 2
6 5.47.52 01/03/2014 01.003.1 1 1 5.46.51 01/03/2014 01.001.3 0 1 101
7 5.47.54 01/03/2014 01.003.1 0 1 5.47.52 01/03/2014 01.003.1 1 1 2
8 5.48.38 01/03/2014 01.003.3 1 1 5.47.54 01/03/2014 01.003.1 0 1 84
9 5.48.39 01/03/2014 01.003.3 0 1 5.48.38 01/03/2014 01.003.3 1 1 1
10 5.48.51 01/03/2014 01.004.3 1 1 5.48.39 01/03/2014 01.003.3 0 1 12

il problema sta nella colonna risultato perchè, mentre i record da 1 a 5 potrebbero andare bene perchè esprimono la differenza in secondi in secondi, il record 6 (101) non esprime i secondi, che dovrebbero essere 61. Come posso fare per risolvere questo problema? e come posso fare per rendere il campo risultato nel formato ora estesa (hh.mm.ss)?

Grazie
leonardo

alx_81 Profilo | Guru

>Salve, allora, potrei aver trovato la solozione, appena è confermata
>ve la posto, nel frattempo avrei bisogno di un'altro consiglio:
Ciao,
ti chiedo la cortesia di passare il CREATE TABLE e le insert di esempio, affinchè io possa lavorare sugli oggetti passati.
Grazie
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

leonardo1968 Profilo | Newbie

Avrei risolto importando il campo "ORA" come numero...adesso funziona.

Grazie
Leonardo

alx_81 Profilo | Guru

>Avrei risolto importando il campo "ORA" come numero...adesso funziona.
perfetto, scusa la latenza


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5