Modo de ordenar en SQL

Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Modo de ordenar en SQL

Post 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
FWH 20.12 BCC7
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Modo de ordenar en SQL

Post 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
William, Morales
Saludos

méxico.sureste
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post 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
FWH 20.12 BCC7
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Modo de ordenar en SQL

Post by thefull »

Mira si alguna de las soluciones te sirven;
http://www.linuxweblog.com/blogs/sandip ... data-mysql
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Modo de ordenar en SQL

Post by FranciscoA »

Hola, prueba asi:

Code: Select all

SELECT columna FROM tabla ORDER BY CHAR_LENGTH(columna)=3 ;
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post 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.
FWH 20.12 BCC7
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Modo de ordenar en SQL

Post by xmanuel »

Prueba esto:
select loginUsuario, prioridad from avisos order by LPAD(loginUsuario, 10,'0')
La funcion es LPAD(columna, ancho,cadenaDeRelleno)
______________________________________________________________________________
Sevilla - Andalucía
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post 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');
FWH 20.12 BCC7
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Modo de ordenar en SQL

Post 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
______________________________________________________________________________
Sevilla - Andalucía
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post 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
FWH 20.12 BCC7
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Modo de ordenar en SQL

Post by sysctrl2 »

que ancho tiene el campo ?

quizas el error esta al guardar la variable

replace campo with alltrim( cVar )

saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post by Ramón J. »

El campo tiene un ancho de 7 caracteres y es alfanumérico
FWH 20.12 BCC7
Ramón J.
Posts: 79
Joined: Mon Feb 13, 2006 8:23 pm

Re: Modo de ordenar en SQL

Post 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?
FWH 20.12 BCC7
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Modo de ordenar en SQL

Post 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..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Modo de ordenar en SQL

Post 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
______________________________________________________________________________
Sevilla - Andalucía
Post Reply