Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2006, 10:41
aquosoft
 
Fecha de Ingreso: noviembre-2006
Mensajes: 1
Antigüedad: 18 años, 2 meses
Puntos: 0
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)

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 yo me ayuda.. voy a estar eternamente agradecido...

Última edición por aquosoft; 01/11/2006 a las 10:48