FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Modo de ordenar en SQL
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Modo de ordenar en SQL
Posted: Sun Sep 02, 2012 05:02 PM

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 los campos 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
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Modo de ordenar en SQL
Posted: Sun Sep 02, 2012 05:10 PM

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
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Sun Sep 02, 2012 07:05 PM

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
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: Modo de ordenar en SQL
Posted: Sun Sep 02, 2012 11:21 PM

Mira si alguna de las soluciones te sirven;

http://www.linuxweblog.com/blogs/sandip ... data-mysql

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Modo de ordenar en SQL
Posted: Sun Sep 02, 2012 11:32 PM
Hola, prueba asi:
Code (fw): Select all Collapse
SELECT columna FROM tabla ORDER BY CHAR_LENGTH(columna)=3 ;

Saludos.
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 08:37 AM

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
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 01:56 PM

Prueba esto:
select loginUsuario, prioridad from avisos order by LPAD(loginUsuario, 10,'0')
La funcion es LPAD(columna, ancho,cadenaDeRelleno)

______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 06:03 PM

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
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 07:21 PM

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
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 07:39 PM

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
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 09:00 PM

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 "
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 09:05 PM

El campo tiene un ancho de 7 caracteres y es alfanum茅rico

FWH 20.12 BCC7
Posts: 152
Joined: Mon Feb 13, 2006 08:23 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 09:46 PM

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
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 10:13 PM

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 "
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Modo de ordenar en SQL
Posted: Mon Sep 03, 2012 10:17 PM

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