Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-11-2004
JANDREGUE JANDREGUE is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA
Posts: 40
Poder: 0
JANDREGUE Va por buen camino
Consulta Limitada

Hola amigos,

Tengo un Problema... En una tabla tengo los siguientes campos Cliente, Factura y Valor_Factura. Necesito contar los campos de esta tabla ordenados por Valor_Factura descendentemente, pero solo hasta que la sumatoria del Campo Valor_Factura No sea mayor a un valor dado..por ej:$500.000.. Es decir me interesa saber ¿Cuántas Facturas suman $500.000. o al menos se aproxime ordenadas como les dije ya por el campo del valor en forma descendente.....

Espero haberme hecho entender... Si puden ayudarme les agradezco de antemano.
__________________
No hay metas imposibles... sólo barreras mentales.
Responder Con Cita
  #2  
Antiguo 02-11-2004
buitrago_listas buitrago_listas is offline
Miembro
 
Registrado: oct 2004
Posts: 33
Poder: 0
buitrago_listas Va por buen camino
Parece

Que es una solucion de Where, en verdad, no te haces entender, o es que es tan simple la respuesta.

Saludos

Fer
Responder Con Cita
  #3  
Antiguo 02-11-2004
buitrago_listas buitrago_listas is offline
Miembro
 
Registrado: oct 2004
Posts: 33
Poder: 0
buitrago_listas Va por buen camino
algo asi

Select count(*) from facturas
where monto_factura < 500000

Para contar, no te hace falta orden...si, parece que no te he entendido...o si.?

Saludos

Otra vez Fer
Responder Con Cita
  #4  
Antiguo 02-11-2004
JANDREGUE JANDREGUE is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA
Posts: 40
Poder: 0
JANDREGUE Va por buen camino
Thumbs up Reconfirmación

Es que lo que pasa es esto:

La tabla seria asi: Ordenada por valor descendentemente
Cliente Factura Valor
Julio G. 00001 180.000
Antonio 00005 120.000
Andres 00002 90.000
Maria 00008 50.000
Josefa 00007 40.000
Camilo 00004 20.000

Ahora necesito contar los registros hasta que la suma de los valores de la factura sea menor o igual a $400.000
La Repuesta seria (3) Por que la sumatoria de los tres primeros registros 180.000+120.000+90.000=390.000
si le sumamos el cuarto registro se pasaria a 440.000 y el limite es $400.000... espero que ahora me halla hecho entender mejor
__________________
No hay metas imposibles... sólo barreras mentales.
Responder Con Cita
  #5  
Antiguo 02-11-2004
frudolph frudolph is offline
Miembro
 
Registrado: oct 2004
Posts: 40
Poder: 0
frudolph Va por buen camino
Si estás trabajando con una base de datos relacional (Interbase, Firebird, Oracle, SQL-Server, Informix, DB2, MySQL u otra), la mejor opción sería a través de un procedimiento almacenado que recorra la tabla y acumule en una variable local al procedimiento el total. Cuando llegues al monto deseado (antes de que te pases), deberías cortar el recorrido de la tabla y devolver el último valor.

Otra opción es a través de un método, función o procedimiento directamente con Delphi haciendo lo mismo (recorrer la tabla e ir acumulando hasta alcanzar el valor).

Por supuesto lo primero que tienes que hacer (antes de acumular) ver si te pasas o no del vaor deseado y luego: acumular; o cortar el procedimiento.

Esto es fácil siempre que lo que necesites sea recorrer la tabla secuencialmente; ahora bien, si lo que necesitas es calcular el valor más aproximado, considerando todos los registros posibles, ya tienes que recurrir a un procedimiento recursivo y ver que sumatoria (de las posibles) te cae mejor. Por supuesto, esto llevaría mucho más tiempo de procesamiento y muchos más recursos (memoria).
Responder Con Cita
  #6  
Antiguo 02-11-2004
JANDREGUE JANDREGUE is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA
Posts: 40
Poder: 0
JANDREGUE Va por buen camino
Para Fudolph

Amigo Fudolph ...

Agradezco tu recomendacion... yo lo habia craneado asi... pero pense que depronto por SQL.. podia encontrar una consulta condicionada que me diera el dato rapidamente. estoy trabajando con Interbase

De todas formas gracias por las recomendaciones
__________________
No hay metas imposibles... sólo barreras mentales.
Responder Con Cita
  #7  
Antiguo 02-11-2004
JANDREGUE JANDREGUE is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA
Posts: 40
Poder: 0
JANDREGUE Va por buen camino
Se me ocurrio otra cosa

Hola..Pensando otra cosa ...

Alguien sabe como por SQL.. puedo seleccionar los 10,20,30....n... mejores campos de una tabla?

Es decir como un Top 10


Gracias
__________________
No hay metas imposibles... sólo barreras mentales.
Responder Con Cita
  #8  
Antiguo 05-11-2004
frudolph frudolph is offline
Miembro
 
Registrado: oct 2004
Posts: 40
Poder: 0
frudolph Va por buen camino
Nuevamente, depende del motor con el que estás trabajando (cosa que deberías indicar). Igual, si se trata de Firebird 1.5 (no Interbase), la consulta debería tener la forma:

"select first n * from..."

No recuerdo exactamente, pero creo que también era posible hacer ago por el estilo en Oracle.

Sino, la otra opción es a través de un procedimiento almacenado, donde le deberías pasar la cantida de registros a mostrar y procesar la tabla a través de un "for do.." o un "for each..." (según el motor) y una variable de control, hasta llegar a la cantidad que necesites para luego terminar el procedimiento.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:47:39.


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
Copyright 1996-2007 Club Delphi