Page 1 of 2

Modo de ordenar en SQL

Posted: Sun Sep 02, 2012 5:02 pm
by Ramón J.
Hola, foro. Desde hace mucho tiempo estoy usando un programa que yo mismo hice con fivewin. Ahora estoy tratando de crear una web con los datos almacenados. Me encuentro con el siguiente problema:

- Uno de _ es alfanumérico, conteniendo una serie 1,2,3,4,5,6... y a continuación 1CV, 2CV, 3CV. 4CV, 5CV.. . En fivewin ordenada dichos datos con la siguiente sentencia:

index on EMPRESA->CV+padl(alltrim(EMPRESA->NUMERO),7, "0"), con lo que aparecian primero los números 1,2,3,4,5,6,.. etc y a continuación la serie 1CV, 2CV, 3CV, 4CV

¿En SQL cómo sería?

Un saludo y perdonad si la cuestión planteada no correponde a este foro.

Ramón

Re: Modo de ordenar en SQL

Posted: Sun Sep 02, 2012 5:10 pm
by wmormar
Ramón J.,

En SQL como tal no existen los archivos de indices. Bastara con hacer esto en la sentencia SQL

SELECT * FROM clientes ORDER BY nombre

Aqui se ordenara por nombre la consulta generada por la sentencia SELECT

Re: Modo de ordenar en SQL

Posted: Sun Sep 02, 2012 7:05 pm
by Ramón J.
Gracias, William, por tu interés.

Sé que en SQL no existe el comando INDEX y sé también que en SQL se ordena con ORDER BY, pero cuando se trata de un campo alfanumérico, que en mi caso se compone de número y caracteres(exclusivamente "CV"), no lo ordena como yo quiero. Por ejemplo, tengo en el campo a ordenar tengo los datos siguientes:

1, 1CV, 2, 2CV, 3, 3CV, etc.. quiero que lo ordene así:

1
2
3
1CV
2CV
3CV

No sé si me he explicado bien

Un saludo

Re: Modo de ordenar en SQL

Posted: Sun Sep 02, 2012 11:21 pm
by thefull
Mira si alguna de las soluciones te sirven;
http://www.linuxweblog.com/blogs/sandip ... data-mysql

Re: Modo de ordenar en SQL

Posted: Sun Sep 02, 2012 11:32 pm
by FranciscoA
Hola, prueba asi:

Code: Select all

SELECT columna FROM tabla ORDER BY CHAR_LENGTH(columna)=3 ;
Saludos.

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 8:37 am
by Ramón J.
Gracias, Francisco y Rafa, por vuestra ayuda, pero sigue sin funcionar.

Vuestras sentencias hacen referencia a mysql, y yo estoy usando el editor SQL del Access.

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 1:56 pm
by xmanuel
Prueba esto:
select loginUsuario, prioridad from avisos order by LPAD(loginUsuario, 10,'0')
La funcion es LPAD(columna, ancho,cadenaDeRelleno)

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 6:03 pm
by Ramón J.
Gracias, xManuel.

He probado con lo que me has dicho y el editor SQL de Access me dice que "la función 'Lpad' no está definida en la expresión"

Concretamente he puesto lo sigueinte:

SELECT SSAATT.N_REG_IFA
FROM SSAATT
ORDER BY LPAD(N_REG_IFA,7,'0');

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 7:21 pm
by xmanuel
El SQL de Access es muy raro :-(

Prueba esto a ver si te funciona:
Right(String(ancho, cadenaDeRelleno) & columna, ancho)

Mira esta página http://www.databasedev.co.uk/access-sql ... tions.html

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 7:39 pm
by Ramón J.
Manuel, he ejecutado tu instrucción de la siguiente manera:

SELECT SSAATT.N_REG_IFA
FROM SSAATT
ORDER BY RIGHT(STRING(7, '0')& N_REG_IFA,'7');

El resultado es:

7
15
86
101
190
1CV
200
241
321
391
3CV
482
4CV

Si te das cuenta, intercala, al final de cada serie numérica (unidades, decenas, centenas..), los números que tienen "CV". Y lo que pretendo es:

7
15
86
101
190
200
241
321
391
482
1CV
3CV
4CV

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 9:00 pm
by sysctrl2
que ancho tiene el campo ?

quizas el error esta al guardar la variable

replace campo with alltrim( cVar )

saludos.

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 9:05 pm
by Ramón J.
El campo tiene un ancho de 7 caracteres y es alfanumérico

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 9:46 pm
by Ramón J.
He conseguido ordenar el campo, pero en consultas diferentes:

Con esta instrucción ordeno los números que tienen las letras 'CV"

SELECT NUMERO.
FROM EMPRESA (((NUMERO) Like "*CV"))
ORDER BY Right(String(7,'0') & NUMERO,'7');

Y con esta los que no la tienen:

SELECT NUMERO
FROM EMPRESA
WHERE (((NUMERO) Not Like "*CV"))
ORDER BY Right(String(7,'0') & NUMERO,'7');

Ahora la cuestión es unir las consultas sin que se altere el resultado. ¿Como hacerlo?

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 10:13 pm
by sysctrl2
quizas la solucion es la siguiente,
cuando el dato es numero, debes de guardarlo como numero

replace with str( val( cVar ), 7)

excel asi lo interpreta.

y cuando el dato es letra y numero reemplazas normal alltrim( cVar )

de esta forma los datos con letras y numeros se alinean a la izq y los numero a la derecha,

y el orden tendrias que ponerlo normal

order by to campo

saludos..

Re: Modo de ordenar en SQL

Posted: Mon Sep 03, 2012 10:17 pm
by xmanuel
A ver esto va un poco mejor...
Prueba esto:

(SELECT NUMERO.
FROM EMPRESA (((NUMERO) Like "*CV"))
ORDER BY Right(String(7,'0') & NUMERO,'7') )
UNION ALL
(SELECT NUMERO
FROM EMPRESA
WHERE (((NUMERO) Not Like "*CV"))
ORDER BY Right(String(7,'0') & NUMERO,'7'));

Mira el UNION ALL :P