Ver Mensaje Individual
  #1  
Antiguo 01-11-2006
aquosoft aquosoft is offline
Miembro
 
Registrado: oct 2006
Posts: 17
Reputación: 0
aquosoft Va por buen camino
paginacion, problemas...

buenas gentes, estoy intentando mostrar los resultados de una consulta en paginas...
investigando y buscando por todos lados, me di cuenta que siempre llego a lo mismo.. el codigo encontrado no funciona o no hace lo esperado..
despues de pensar un rato arme una consulta que en teoria pagina, pero tengo problemas cuando quiero ordenar por un campo string (anda medio mal)... la idea es tener tres selects anidados, pero para entenderlos, es mejor ir de adentro hacia afuera... (trabajo en visual basic y sql server,. asi ke la forma de enviar parametros cuando tenga terminada la query puede diferir de la de delphi, pero lo que kiero ver por que no anda es la consulta misma...)

Código:
SELECT * FROM (
            SELECT TOP 10 * FROM ( 
                SELECT top 10 apellido,nombre,nrodoc FROM afiliados where apellido like 'PON%' order by apellido asc) as x1 
            ORDER by apellido DESC) as x2 
ORDER by apellido ASC
la idea es pasar valores a los select top el de la primer consulta es resultado de multiplicar 10 (la cantidad de registros por pagina) X el numero de pagina
[para la pagina 2 el valor del select central seria 20]

voy a dar por sentado que ya tenemos los primeros 10 registros y ahroa queremos los segundos 10

Código:
SELECT top 20 apellido,nombre,nrodoc FROM afiliados where apellido like 'PON%' order by apellido asc) as x1 
para la primer consulta, el select top 20 interno busca los primeros 20 registros que correspondan con la clausula where ordenados por apellido en forma ascendente...

Código:
SELECT TOP 10 * FROM ( 
                SELECT top 20 apellido,nombre,nrodoc FROM afiliados where apellido like 'PON%'  order by apellido asc) as x1 
ORDER by apellido DESC) as x2 
esta segunda parte de nuestra consulta selecciona en forma descendente los 20 registros de la primer consulta y toma los primeros 10 (al estar en orden descendente.. serian los ultimos 10, los de la segunda pagina, es decir.. los que nos interesan.

Código:
SELECT * FROM (
            SELECT TOP 10 * FROM ( 
                SELECT top 20 apellido,nombre,nrodoc FROM afiliados where apellido like 'PON%' order by apellido asc) as x1 
            ORDER by apellido DESC) as x2 
ORDER by apellido ASC
esta tercer parte agarra los 10 registros seleccionados en la consulta anterior y los ordena en orden ascendente (recordemos que estos ultimos 10 son los que nos interesan, pero estaban ordenados al revez), por tanto, los vuelvo a ordenar y son los que finalmente muestro...

todo parece funcionar de maravilla no?.. pero no...
si yo hago el select, pero en lugar de ordenar por un string, los ordeno por nrodoc (valor numerico), la consulta funciona bien, pero al hacerla por apellido repite valores y no logro entender por que..
Si alguien con la cabeza un poco menos quemada que que la mia me ayuda.. voy a estar eternamente agradecido...

Última edición por aquosoft fecha: 01-11-2006 a las 17:47:33.
Responder Con Cita