[VB.NET]Valore massimo in un campo

domenica 20 gennaio 2008 - 10.52

nioMatrix Profilo | Junior Member

Salve a tutti,
volevo chiedervi se è possibile, in una colonna di tipo testo in cui sono memorizzate stringhe e numeri, ottenere il valore numerico massimo.

Ho provato in questo modo:

SELECT MAX(ID_ARTICOLO) FROM ARTICOLI

ma in questo modo mi restituisce l'ultimo record della tabella ordinata in modo alfabetico.

Spero di essere stato chiaro.
Salve

StefanoLep Profilo | Senior Member

Ciao, questo dovrebbe andar bene:

SELECT top 1
(case when (isnumeric (ID_ARTICOLO) = 1) then ID_ARTICOLO
else 0
end) as ID_ARTICOLO_Num


FROM Articoli
Order by ID_ARTICOLO_Num Desc


E' la passione che genera il progresso :-)

nioMatrix Profilo | Junior Member

Ho provato, ma mi viene restituito un errore quando vado ad eseguire la query

StefanoLep Profilo | Senior Member

Io ho provato con sql2000, tu che db usi?
E' la passione che genera il progresso :-)

nioMatrix Profilo | Junior Member

Un DataBase Microsoft Access 2000

nioMatrix Profilo | Junior Member

cmq grazie al tuo aiuto da cui ho preso spunto ci sono riuscito.
Ho fatto in questo modo:

SELECT MAX(ID_ARTICOLO) FROM ARTICOLI WHERE ISNUMERIC(ID_ARTICOLO)=TRUE

Grazie mille

nioMatrix Profilo | Junior Member

No scusami, in questo modo mi trova solo i valori massimmi da 1 a 9 , infatti se c'è 10 non lo trova.
In poche parole devo duplicare un elemento e devo trovare il campo ID_ARTICOLO, che è la chiave primaria, da assegnare al nuovo record.

StefanoLep Profilo | Senior Member

Hoprovato la tua query con access 2000 e funziona anche con numeri maggiori di 10, puoi fare una copia del db con la sola tabella che ti interessa (con una decina decina di record) e allegarlo alla prossima replica così vedo se c'è qualcosa nella struttura della tabella che non fa funzionare la query.
E' la passione che genera il progresso :-)

SSUPERPIPPO Profilo | Guru

>No scusami, in questo modo mi trova solo i valori massimmi da
>1 a 9 , infatti se c'è 10 non lo trova.
>In poche parole devo duplicare un elemento e devo trovare il
>campo ID_ARTICOLO, che è la chiave primaria, da assegnare al
>nuovo record.
>

Il tuo problema è legato al tipo di campo; se fosse un campo numerico allora il risultato sarebbe corretto, probabilmente il tuo campo è di tipo Testo per cui l'estrazione del massimo è legato all'ordinamento Alfabetico (tra 9 e 10 il maggiore risulterà sempre 9).

La soluzione è convertire nella SELECT il valore del campo in questo modo (vado a memoria):

SELECT Max(CInt([ID_ARTICOLO])) AS ID FROM TuaTabella WHERE Isnumeric(ID_ARTICOLO);

Fammi sapere, ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

nioMatrix Profilo | Junior Member

Grazie mille SSUPERPIPPO il tuo metodo, almeno da quello che ho potuto constatare, funziona alla perfezione.
Ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5