Newsgroup: it.comp.lang.visual-basic
Titolo: [Ordinare campo txt con query]

Scusate,
so che il problema č trito e ritrito ma,pur cercando nei vari post non
ho trovato ,o no sono stato in grado di trovare una solouzione.
Il mio problema č il seguente,
ho un db access con un campo testo contenente dati tipo
100
20
48
10
5
SAT
COMM
vorrei ordinare questo benedetto campo in modo che risulti cosě
5
10
20
48
100
COMM
SAT
io attualmente uso questa query :
Set rs = db.OpenRecordset("SELECT * from MC_ITA WHERE nome LIKE '*" &
Trim(txtCerca.Text) & "*' order by nome ,conc,temp")
avete suggerimenti ?
Vorrei risolverlo possibilmente senza campi di appoggio.
Grazie a tutti
R.Zanni
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 SAT
Il problema grosso č quel 20 prima del 100.
Se non fosse per quello, basterebbe l'order by normale.
Purtroppo tu vuoi un ordinamento molto 'umano', ossia se il campo contiene
un qualcosa interpretabile con un numero, va ordinato secondo valore e non
secondo alfabeto, altrimenti secondo alfabeto.
A questo punto, credo che la cosa migliore sia ordinare secondo:
Order by
IIF(isnumeric(campo),0,1),
IIF(isnumeric(campo),Cast(campo as money),0),
Campo
Ho usato IIF che č di Access, ma poi ho usato Cast che in Access non so come
sia. Sostituisci il Cast con la corrispondente funzione di conversione di
tipo da char a decimale.
Ciao
Alberto
--
E tutto mi sembrava andasse bene...

Grazie proverň


 Ho usato IIF che è di Access, ma poi ho usato Cast che in Access non so


 order by 1
Order by è una clausola di Sql, non di VisualBasic.
Per cui, ciò che segue l'Order by è ovviamente Sql.
Ho comunque testato. Quanto segue funziona perfettamente in Sql-Server.
Per Access va rivisto un po' sintatticamente.
select *
 from tb_eventi
order by
(case
 when isnumeric(valore_testo)=1 then 0
 else 1
 end),
(case
 when isnumeric(valore_testo)=1
  then cast(valore_testo as decimal(19,4))
 else 0
 end),
valore_testo


Parrebbe funzionare, grazie mille


 Per cui, ciò che segue l'Order by è ovviamente Sql.
mi era più che chiaro, ma mi aspettavo di leggere "order by nomecampo" e non
"order by 1" (che non so cosa vuole dire... il primo campo della tabella? e
se cambi l'ordine o aggiungi un campo?)


 campo della tabella? e se cambi l'ordine o aggiungi un campo?)
Allora non ti è chiaro per niente.
Da nessuna parte c'è scritto, o qualcosa si trasforma in, "Order by 1".
Vediamola così:
La query "Select * from tabella order by campo", con 'campo' di tipo
numerico, ti restituisce la stessa identica cosa di "Select * from tabella
order by campo*2".
Siamo d'accordo fin qua?
Bene. Adesso immagina di sostituire l'operatore * con una funzione che si
chiama IIF.
E' più chiaro?


 Parrebbe funzionare,
Bene.
Mi sai dire qual'è la funzione di cast del tipo in Access, per mia
informazione?


 E' piů chiaro?


poi non conosco "order by campo*2"
*2 cosa significa?
"*" = carattere jolly?

 non "diventa" Order by 0 ???
Come detto sopra: no.



Operatore di moltiplicazione?


 non di accesso a database).
BEH, ti posso dire che qua č partito un bel dibattito su "COSA FA" la order
by, ed č risultato che
non lo ha capito bene quasi nessuno
pensavamo (mezza azienda,direi) che la order by ragionasse "a priori" sulla
tabella, e non "dati i valori"
ora, dopo pianti dirotti , stiamo meglio.
Grazie.
nota:
Il prossimo mondo lo desidero BEN piů semplice - e non parlo certo solo di
informatica.

cmq credo che intendesse sapere che vuol dire
Order by 1
piuttosto che
Order by 0
beh, indica di ordinare il campo nella posizione 1 o 0.
quindi se una tabella ha: C1, C2, C3 come campi,
Order by 1
ti ordina per C2
Daniele


Ciò che scrivi è corretto.
Non ha, però, assolutamente *niente* a che vedere con ciò che io ho scritto.
Oggi ho l'impressione di essere poco chiaro, almeno stando ai reply...


 Oggi ho l'impressione di essere poco chiaro, almeno stando ai reply...
solo oggi? :-)
comunque la query che hai inviato è concettualmente "tosta"
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


GRAZIE di cuore  ;-))

 comunque la query che hai inviato è concettualmente "tosta"
Una cosa su cui insisto è che *prima* di arrivare al client/front-end o
chiamalo come vuoi, bisogna conoscere bene gli strumenti di background.
E il linguaggio SQL è una cosa che permette, se ben usato, di
risolvere/ottimizzare una quantità di cose incredibile.
Vedo spesso gente che si accanisce a scrivere le query nell'Ide di vb,
debuggandole in Vb, quando qualunque dbms, da Clipper a DB2, offre dei
front-end per eseguire la query. Col risultato che si fatica a distinguere
cosa esegue lato client e cosa esegue nel motore Sql.
Era altrettanto interessante quella che estraeva il primo ID libero, di un
paio di giorni fa.
Ma sto divagando...


 campo1>30 vengono estratti per primi, perchè 0<1.
eccolo lì il salto logico.
dicendo" 
"select * from tab order by 1"
equivale a
"select * from tab order by [nome prima colonna]"
dai adito all'interpretazione che
"Select * from tabella order by IIF(campo1>30,0,1)"
ordini in base alla colonna 0 o 1 in funzione del risultato dell'iif, cosa
abbastanza problematica, perchè afaik non puoi avere un recordset ordinato
in questo modo. l'interpretazione corretta è che l'ordinamento viene
effettuato in ragione del valore restituito dall'iif, quindi, ma
ammetterai che il dubbio poteva sorgere.
grazie per aver chiarito i miei dubbi. 


R.Zanni 
Prova una cosa del genere:
SELECT codice, campo2, right('0000000000' + codice,10) as cod2 from
mytabe ORDER BY right('0000000000' + codice,10)
=======================================================================
Se mi vuoi scrivere togli le maiuscole
cteniza...@hotmail.com
=======================================================================

 mytabe ORDER BY right('0000000000' + codice,10)
Quindi "999.9" viene dopo "1000"
E "999       " (notare gli spazi) viene dopo "1000"
Giusto?


 In mancanza di decimali la mia proposta è più che sufficiente.
Esistono anche gli spazi (vedi il mio post).
Inoltre tu imponi un limite massimo di caratteri, che potrebbe non essere
corretto (esistono campi testuali a lunghezza variabile).
Ma ribaltiamo il punto: tu leggi che qualche parte che *non* ci siano
decimali?
In mancanza di certezze, la tua proposta è non accettabile.
Ciao


SA
Ti pare che ci siano dei decimali o che siano stati citati da chi ha
posto la domanda?.
In mancanza di decimali la mia proposta č piů che sufficiente.
