PDA

Ver la Versión Completa : invertir una tabla


ebeltete
20-05-2003, 01:31:15
tengo un query (select * from .....) el cual me da el resultado de una tabla que no tiene campo clave, necesito invertir ese query o sea si el resultado es:
1
2
3
4
me aparezca:
4
3
2
1
estoy hablndo de los registros no de los campos,lo hice creando una tabla temporal (tabla2) y haciendo
for i:=1 to tabla1.recordcount do
begin
tabla1.recno:=i;
tabla2.insert;
tabla2['nombre']:=tabla1['nombre'];
tabla2.post;
end;
no se si soy claro, quisiera saber si hay alguna forma de hacerlo con sql de un query, uso tablas paradox 7, gracias

Ruben_Cu
20-05-2003, 02:08:05
Hola ebeltete, no se si te servirá pero debías probar usando la cláusula ORDER BY nombre delcampo desc.
si en tu tabla algún campo sigue un orden ya sea numerico o por fecha podrías proceder en tu select * from..... where ...... order by campo desc.
Y con el ORDER BY campo asc o por omisión invierte de nuevo el orden.
Por aquí anda un hilo reciente sobre el tema buscalo para mas detalles.
Espero por ahí ande lo que necesitas
Saludos

ebeltete
20-05-2003, 02:16:58
gracias por la ayuda, pero order by no me sirve pues la tabla no esta ordenada por ningun campo

delphi.com.ar
20-05-2003, 02:26:32
En Oracle, supongo que en otros motores también, puedes hacer una "chanchada" como esta:
SELECT SE_NOMBRE,...
FROM ( SELECT ROWNUM ORDEN, SE_NOMBRE, ...
FROM USE_USUARIOS )
ORDER BY ORDEN DESC

Te lo informo pero no te lo recomiendo, Saludos!

ebeltete
22-05-2003, 04:39:24
no logro encontrar la solucion, no me funciona select * from(select ...) where...
esto por que se debe?? por mi version de Delphi? tengo Delphi 5. Por las tablas??? uso paradox.
No puedo usar order by porque no la puedo ordenar por ninguno de los campos, tengo que lisa y llanamente "darla vuelta", o sea que recno1=recordcount
recno2=recordcount-1
recno3=recordcount-2
.........
tal vez no exista forma

marcoszorrilla
22-05-2003, 08:07:41
Lo que tienes que hacer si quieres tener la tabla en orden natural y en el orden inverso, es crear un campo autoincrementado.

De esta manera si se ordena por este campo tienes el orden natural

Order by MiCampo

u

Order by MiCampo Desc

Un Saludo.

guillotmarc
22-05-2003, 20:27:46
También pienso que tienes que añadir un campo para poder ordenar. Ya sea un autonumérico, o un campo fecha donde guardar la fecha-hora de introducción.

De esta forma es trivial sacar un resultado u otro.

NOTA : Piensa además que una consulta que no tenga un order by especificado, no tiene porqué salir en orden natural. Este es un concepto que no existe en SQL. Según el estándar, puede salir cada vez en un orden distinto.

ebeltete
22-05-2003, 21:45:38
Agradezco vuestras respuestas, pero el tema no puedo con autoincrement ni usando un campo clave, es que tengo una tabla la que el usuario crea insertando registros de la manera que el quiera, (es un play list) o sea: tengo una tabla titulos de donde el usuario saca el tema a insertar en el playlist y lo inserta en el lugar que el quiera en otra tabla, esta ultima es la que quiero "dar vuelta", gracias.

__cadetill
23-05-2003, 01:10:59
Si es un PlayList, la tabla tampoco sera muy granda. Siempre puedes recorrer los registros en orden inverso


Tabla.Last;
where not Tabla.BOF do
begin
// Lo que sea como por ejemplo meterlos en un ListView

Tabla.Prior;
end;


Espero te sirva