Newsgroup: it.comp.software.database
Titolo: query da fare su una tabella Access 2007

In access 2007 ho una tabella
Nella prima colonna, "NOME", ho un nome proprio di persona.
Poi c'è la colonna "INDIRIZZO", poi c'è "NUMEROORDINE", poi c'è
"TITOLOORDINE"
NOME identifica univocamente una persona. INDIRIZZO dunque è sempre
uguale per record con lo stesso valore di NOME
Ogni record con lo stesso valore di NOME ha diversi valori di
NUMEROORDINE, che sono progressivi. TITOLOORDINE cambia per ogni
ordine, alcuni possono essere uguali.
vorrei fare una query il cui risultato sia una tabella analoga a
questa descritta in cui ci siano record per ogni persona specificata
da NOME nella tabella originaria, ma in cui ci sia massimo un record
per ogni NOME, e tra quelli presenti nella tabella originaria venga
scelto quello con NUMEROORDINE più elevato.
Non rieco a capire come fare, hofatto verie ricerche in internet ma le
query consigliate danno risultati che non c'entrano nulla.


Ciao Giorgio.
Ti servono 2 query, la prima per estrarre, a parita' di NOME, il
massimo NUMEROORDINE, e la seconda per estrarre dalla tua tabella i
record che hanno stesso NOME e NUMEROORDINE della prima query.
Questo che segue e' il SQL della prima query.
SELECT TabellaOrdini.NomePersona, Max(TabellaOrdini.NumeroOrdine) AS
UltimoOrdine FROM TabellaOrdini GROUP BY TabellaOrdini.NomePersona;
Questo che segue e' il SQL della seconda query.
SELECT TabellaOrdini.* FROM TabellaOrdini INNER JOIN
Query1_TabellaOrdini ON (TabellaOrdini.NumeroOrdine =
Query1_TabellaOrdini.UltimoOrdine) AND (TabellaOrdini.NomePersona =
Query1_TabellaOrdini.NomePersona);
A vedere la struttura della tabella, pero', mi viene da pensare che il
tuo db non sia normalizzato: se, cioe', il valore di INDIRIZZO e'
sempre lo stesso a parita' di NOME, direi che dovresti avere una
tabella con tutte le coppie NOME e INDIRIZZO agganciate ad un campo
chiave cosi' da trovare, nella tua tabella degli ordini, il valore
della chiave in luogo della coppia di campi che stai usando adesso.
HTH
Popi

 della chiave in luogo della coppia di campi che stai usando adesso.
Quoto, la tabella cosě com'č non č normalizzata. Va ripensato il database.

 della chiave in luogo della coppia di campi che stai usando adesso.
Ciao Popi,
grazie, ha funzionato.
Adesso invece devo fare una query che estragga soltanto i record nel
cui campo TITOLOORDINE è contenuta una certa parola. Ho fatto una
select di tutte le colonne di Query2_TabellaOrdini e poi in fondo ci
ho messo:
WHERE Query2_TabellaOrdini.TITOLOORDINE LIKE '%VITI%'
ma non funziona. Il risultato è una tabella bianca.
ho provato anche con 'VITI', con "%VITI%" e con "VITI" ma non cambia
nulla.
Sbaglio la sintassi? Forse Access 2007 non supporta il LIKE?

 Sbaglio la sintassi? Forse Access 2007 non supporta il LIKE?
Non conosco per nulla Access, ma a quanto sento dire ha parecchie
cose che non sono gestite in modo standard, quindi al posto tuo
farei un tentativo usando * al posto di % ...
ciao
Giacomo

On 14 Apr, 17:51, Giacomo Degli Esposti

Ciao!
Si' Giacomo, Access usa '?' per un singolo carattere e '*' per
qualsiasi sequenza di caratteri.
Popi

 qualsiasi sequenza di caratteri.
sì grazie a tutti, nel frattempo sono riuscito a fare questo e una
serie di altre cose, grazie anche a google.
A proposito della tua osservazione sul database non normalizzato: a
noi arriva un'esportazione dati in excel fornita da terzi, non
possiamo cambiarla.
La importo in una tabella di access, con struttura pari pari al foglio
di excel.
Su tale tabella faccio una query, che richiama un'altra query, che
richiama un'altra query eccetera finché l'ultima query contiene
l'estrazione di dati nel formato desiderato.
Da quest'ultima query faccio un'esportazione in un altro foglio di
excel.
Tutte le operazioni vengono svolte da un'applicazioncina vba.
L'utente apre il file accde, gli si presenta una finestra di selezione
file con cui va a pescare il foglio di excel, clicca "Apri" e un
attimo dopo gli si apre la finestra per salvare il file di excel
esportato.