Newsgroup: it.comp.appl.access
Titolo: Query ed ordinamento crescente...

ciao ho una query di selezione
che mi svolge una ricerca anagrafica  però vorrei
che l'ordinamento fosse crescente...per codice...
niente di + facile direte voi..
ho messo Crescente in Ordinamento...
ma l'ordinamento deve essere effettuato al terzo codice... mi spiego..
la stringa di codici è questa..
34/2000/F345
100/2000/F237
quindi vorrei che l'ordinamento fosse effettuato considerando
F237
F345
etc....
grazie...

prova così:
select codice , campo1, campo2, .... from nometabella order by
Mid(cosice,Instr(codice,"F"),len(codice));
controlla la sintassi della funzione instr, non la ricordo precisamente
ciao omnitow
"SuperPippo®" <ik0qd...@SPAMlibero.it> ha scritto nel messaggio
news:ScpM8.22093$86.5...@twister1.libero.it...


 grazie...
Se la sottostringa in base alla quale va fatto l'ordinamento è sempre alla
fine ed è sempre di quattro caratteri come nell'esempio, puoi risolvere
creando nella query un nuovo campo in cui inserire un'espressione del tipo:
Espr1: Right([TuaStringa];4)
dove ovviamente TuaStringa è il campo con i tre codici concatenati. A questo
punto puoi applicare l'ordinamento che vuoi al campo appena creato.
Ciao
Galliano.

"SuperPippo®" <ik0qd...@SPAMlibero.it> ha scritto nel messaggio
news:ScpM8.22093$86.5...@twister1.libero.it...

Una strada potrebbe essere quella di aggiungere una nuova colonna alla
query. Nel nome campo scrivi:
Ordina: Right([TuoNomeCampo];4)
Imposta l'ordinamento su crescente e posiziona la colonna alla prima colonna
se hai altri ordinamenti, altrimenti lasciala pure dove si trova.
Ovviamente l'istruzione va bene se la stringa da ordinare rappresenta sempre
gli ultimi quattro caratteri o meno.
Ciao, Carlo

 gli ultimi quattro caratteri o meno.
-----------------
ciao e grazie per le soluzioni... ma prima di metterle in pratica e provare
dico che non sempre sono 4 cifre...
possono variare da 1 a 4... tipo F1 oppure G4500..
grazie x altre correzioni sul tema...
cmq suggeritemi una soluzione semplice... non sono esperto in Access...
grazie...

 grazie...
Non puň essere troppo semplice, se la lunghezza della sottostringa da
valutare varia di volta in volta.
Nel nuovo campo della tua Query (quello a cui applicare l'ordinamento) puoi
scrivere:
Espr1:
StrReverse(Left(StrReverse([TuaStringa]);(InStr(StrReverse([TuaStringa]);"/"
)-1)))
Č un pň "barocco", ma funziona (a patto che a far da divisore fra i tuoi
codici concatenati ci sia sempre il carattere "/", altrimenti ti da errore):
in sintesi l'espressione volta al contrario la stringa d'origine, trova la
posizione in cui si trova il primo carattere "/", in base al valore trovato
(diminuito di uno) seleziona la sottostringa che ti interessa e poi la
rivolta di nuovo per permetterne la lettura corretta. Ci saranno sicuramente
soluzioni piů immediate, ma neanch'io sono un esperto :)
Ricorda di scrivere al posto di "TuaStringa" il nome del tuo campo; al posto
di Espr1 puoi scrivere quello che vuoi.
Ciao
Galliano

 Galliano
------------------>
ciao Galliano e scusami... ma io sono meno esperto di te... nel senso
che non riesco a fare un nuovo campo nella query...
cmq..confermo che tra i codici vi č sempre il carattere "/"...
anche se la ricerca e l'ordinamento viene appunto effettuato
digitando la prima lettera che equivale ad un iniziale di Comune..
esempio io devo ordinare in maniera crescente i codici del
Comune F digito */*/F...
oppure se devo cercare un codice esatto digito 345/2002/G456..
cmq ti allego il codice sql esistente nella query...
dove devo mettere il tuo codice???
SELECT Anagrafe.N_Protocollo, Anagrafe.Nome, Anagrafe.Codice_Fiscale,
Anagrafe.Sesso, Anagrafe.Nascita, Anagrafe.Comune_Nascita,
Anagrafe.Comune_Residenza, Anagrafe.Distretto, Anagrafe.Telefono,
Anagrafe.Medico, Anagrafe.Indirizzo, Anagrafe.Codice_regionale,
Anagrafe.des_nascita, Anagrafe.des_residenza, Anagrafe.trasf, Anagrafe.cap,
Anagrafe.asl_appartenenza
FROM Anagrafe
WHERE (((Anagrafe.N_Protocollo) Like [Digitare 0???/????/0??? oppure *F*]))
ORDER BY Anagrafe.N_Protocollo;

se hai bisogno di variare il prefisso prova allora con quest'altra
soluzione, secondo me la più adatta e rapida:
SELECT [CampoCodice] AS Espr1, [NomeCampo1] AS Espr2, [NomeCampo2] AS Espr3
FROM NomeTabella
ORDER BY Switch([CampoCodice] Like
"*/F*",Mid([CampoCodice],InStr([CampoCodice],"/F")+1,Len([CampoCodice])),[Ca
mpoCodice] Like
"*/G*",Mid([CampoCodice],InStr([CampoCodice],"/G")+1,Len([CampoCodice])),[Ca
mpoCodice] Like
"*/X*",Mid([CampoCodice],InStr([CampoCodice],"/X")+1,Len([CampoCodice])));
Ovviamente dovrai sostituire i vari nomi tra parentesi quadre con i nomi di
campi e tabella che ti interessano, aggiungere o modificare i valori tra
virgolette dopo i Like. Sistemata l'istruzione sql apri una nuova query in
visualizzazione struttura, clicca con il destro sul pannello dove vengono
visualizzazte le tabelle di origine dei dati, quindi su Visulizza SQL
copiati l'istruzione ed eccoti pronta la tua query,
spero di essere stato chiaro (forse un po' troppo :-)
ciao omnitow
"SuperPippo®" <ik0qd...@SPAMlibero.it> ha scritto nel messaggio
news:ScpM8.22093$86.5...@twister1.libero.it...
