Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   consulta sql traer todos los registros menos los primeros 8 (https://www.clubdelphi.com/foros/showthread.php?t=59911)

jangel_ramirezm 12-09-2008 17:34:44

consulta sql traer todos los registros menos los primeros 8
 
hola a todos buenos dias por acá y antes que nada gracias por tomarse el tiempo de leer este hilo

pués resulta que estoy imprimiendo una tarjeta de abonos dende por la pate de adelante se regsitran los datos del cliente y de la cuenta a demás de los primeros 8 abonos y en la parte de atrás se registran los seiguientes abonos esto no habia dado problema hasta hoy que dijeron que la tarjeta no daba los datos correctos ya que la consulta sql que hago para traer los ultimos abonos repite unos datos y omite otros
este es el código para los primeros 8 registros :

Código SQL [-]
select top 8 ABONOS.*, isnull (OTR_DESC,0) as DESCUENTO,
           isnull (CARGOS,0) as CARGOS , isnull (ENGANCHE,0) as  ENGANCHE
from ABONOS left outer join V_VENTAS_CLIENTES
on ABONOS.NUM_ALM = V_VENTAS_CLIENTES.NUM_ALM
and ABONOS.NUM_CUENTA = V_VENTAS_CLIENTES.NUM_CUENTA
where ABONOS.NUM_ALM = 'BR' and ABONOS.NUM_CUENTA = 6742
order by ABONOS.FECHA asc

y este para los siguientes registros :
Código SQL [-]
select * 
from ABONOS
where NUM_ALM = 'BR' and NUM_CUENTA = 6742
and saldo_act not in ( select TOP 8 saldo_act
     from ABONOS
     where NUM_ALM = 'BR' and NUM_CUENTA = 6742 )
order by FECHA asc

pongo cada cansulta por separado en un tquery para que estos le pasen los datos a la página correspondiente del reporte al reporte

si alguien pudiera decirme si existe una función sql para hacer esto sin necesidad de subconsultas se lo agadeceria mucho.

saludos.

Caro 12-09-2008 17:44:34

Hola jangel_ramirezm, no dices que BD usas, pero en Firebird, se tiene skip para que salte la cantidad que le indicas.

Código SQL [-]
 select skip 8  * from tabla

Saluditos

jangel_ramirezm 12-09-2008 17:52:47

hola de nuevo

una disculpa estoy utilizando sql server 2000
y probé la función skip

y quedó asi
Código SQL [-]
select skip 8 ABONOS.*
from ABONOS left outer join V_VENTAS_CLIENTES
on ABONOS.NUM_ALM = V_VENTAS_CLIENTES.NUM_ALM
and ABONOS.NUM_CUENTA = V_VENTAS_CLIENTES.NUM_CUENTA
where ABONOS.NUM_ALM = 'BR' and ABONOS.NUM_CUENTA = 6742
order by ABONOS.FECHA asc

solo que marca que hay un error de sintaxis cerca de 8

saludos

Caro 12-09-2008 18:20:17

Hola de nuevo, acabo de hacer la prueba, parece que SQL Server no tiene esa función, la otra forma que se me ocurre es utilizando subconsultas como ya lo estas haciendo. Esperemos que venga alguien que maneje SQL Server y te indique alguna función equivalente.

Saluditos

jangel_ramirezm 12-09-2008 18:35:13

hola de nuevo
yo tambien estuve probado la función y creo que no sirve para esto que estoy haciendo ya que la marca como palabra reservada tal vez sirva para otras cosas
lo bueno esque modifiqué la subconsulta y en las mini pruebas que realicé ya trajo los datos como se esperaba; espero que no sea solo en el caso de esa cuenta.
la consulta quedó muy parecida solo que le agregué el order by dentro de la subconsulta y quedó así

Código SQL [-]
select * 
from ABONOS
where NUM_ALM = 'BR' and NUM_CUENTA = 6742
and saldo_act not in ( select TOP 8 saldo_act
     from ABONOS
     where NUM_ALM = 'BR' and NUM_CUENTA = 6742  order by fecha asc)
order by FECHA asc

muchas gracias por las respuestas

saludos.

ninguno 12-09-2008 18:50:46

Hola

No uso SQL Server, pero imagino que un procedimiento almacenado será más rápido que no esa subconsulta. Es decir, hacer la consulta que te retorne todos los registros pero sólo "envías" a partir del octavo resultado (que puedes controlar con una sencilla variable local).

Digo que imagino que será más rápido e eficiente dado que por cada registro estás haciendo la subconsulta, con el SP no hay subconsulta.


La franja horaria es GMT +2. Ahora son las 06:34:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi