Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Suma de columna con limite en SQL Server (https://www.clubdelphi.com/foros/showthread.php?t=74719)

ivantj24 07-07-2011 00:41:31

Suma de columna con limite en SQL Server
 
Hola que tal de nuevo aqui molestando a la comunidad :(, espero me puedan echar una mano con eso, lo que pasa es que estoy haciendo una aplicacion en donde el usuario escogera los parametros para presupuesto, fecha etc, y a traves de estos parametros hago la consulta.

Lo que necesito es que me sume una columna, pero esa suma seran a partir de los parametros que escoja el usuario, entonces, lo que requiero es que me sume una columna de la tabla, pero teniendo como limite una cantidad, y apartir de la cual termine la suma, me muestre esos resultados de los regstros que hayan sido sumados, que por obvias razones estan entre las condicionantes qu eel usuario eligio.

un ejemplo seria:

tengo en una Tabla una columna que quiero sumar, estos datos:

ID - Cantidad
1.....1
2.....2
3.....3
4.....2
5.....3
6.....1

entonces yo escojo fechas, y una cantida que pongo como como limite de 5 dentro de un Edit para la suma, los registros que dan con esta condicion que el usuario escoje son:

ID - Cantidad
2.....2
3.....3
6.....1

entonces necesito, que me sume la columna Cantidad, y que sume todos esos registros hasta que llegue al limite que dio el usuario como limite 5, los unicos datos a mostrar segun mi condicion, serian el

ID - Cantidad
2.....2
3.....3

sumados dan 5, el limite que yo estoy poniendo en un Edit, no se como hacer eso, espero me puedan ayudar, y espero a ver sido claro con lo que no puedo hacer;

hago el Select de esta manera: (estos datos de fecha y importe, yo los paso por parametros, y estan bien, por eso no hay problema, este query es en SQL, yo lo tengo como parametros en delphi)

Código SQL [-]
Select SUM(Importe) AS SUMATORIA from Trama WHERE (FechaCarga Between '02/02/2011' and '01/06/2011') and (Importe Between 10 and 50)


pero lo que quiero es que me empiece a contar apartir del primer registro que cumpla con los parametros, y hasta la cantidad limite, y teniendo esos registros que los muestre, espero alguien me pueda ayudar,
intente poner un HAVING pero ese solo es un condicionante para los registros individuales, no para la sumatoria en conjunto, espero me puedan ayudar y de ante mano muchisimas gracias, espero a ver sido claro :(

necesito como limitar la suma, hasta una cantidad en especifico :(

ecfisa 07-07-2011 01:41:12

Hola ivantj24.

Si no te entendí mál creo que la consulta sería:
Código SQL [-]
SELECT ID, CANTIDAD FROM TU_TABLA
WHERE FECHA BETWEEN :FECHA1 AND :FECHA2
GROUP BY ID, CANTIDAD
HAVING SUM(PRECIO) <= :CANT

Saludos.

ivantj24 07-07-2011 02:00:15

hola que tal ecfisa, gracias por tomarte la molestia de ayudarme, intente lo que dijes pero con mis parametros y no me funciono, resulta que al parecer SUM('campo') <= 100 hace una comparacion de cada registro, pero no lo suma, me muestra todos los registros, no se si estoy haciendo algo mal o no se,

asi pongo mi consulta:

Cita:

Select TramaID, FechaCarga, Importe, Tipo From Trama
WHERE (FechaCarga Between '02/02/2011' and '01/06/2011') and (Importe Between 10 and 50)
Group by TramaID, FechaCarga, Importe, Tipo
Having SUM(Importe) <= 100
esto lo hago en sql, y me arroja todos los registros que esten dentro de la condicion between, pero no me suma la columna, me muestra importe, que es el campo al que estoy sumando, pero en general, me salen todos los datos,

TramaID ----------- FechaCarga --------Tipo--------------Importe
1-------------------17/01/2010----------0---------------- 50


osea me salen todos los importes menores de 100, pero no suma, espero me puedan ayudar, por que lo que quiero es que sume toda la columna, hasta donde la suma de, un ejemplo, hasta donde la suma sea 100, (este valor lo designa el usuario)
gracias efcia por la ayuda, pero al parecer aun no queda, saludos espero me puedan echar la mano con esto

celades1 07-07-2011 07:45:47

Hola

Yo lo haria con un procedimiento, con una sola sentencia no lo veo

saludos

ivantj24 07-07-2011 18:36:31

Alguna idea con ese Procedimiento Almacenado? por que hice varios intentos anoche y nada, me dijeron que usara sub consultas, querys dentro de querys pero no di en el blanco, a lo mejor hice algo mal, y ese es mi problema, como hago eso, si tienes una idea con ese SP te agradeceria la ayuda, o la ilustracion de como poder hacerlo, saludos y muchas gracias de antemano

Caro 08-07-2011 15:50:30

Hola ivantj24, a mi se me ocurre con subconsultas sobre la misma tabla:

Código Delphi [-]
Select t.id, t.importe 
From Trama t left join Trama t1
        on (t.id>=t1.id)
Group By t.id, t.importe
Having sum(t1.importe)<=5
Order By t.id

Primero has la prueba de esa forma y despues le aumentas tus condicones en el Where.

Saluditos

Caro 08-07-2011 16:00:51

Cita:

Empezado por Caro (Mensaje 405858)
......a mi se me ocurre con subconsultas sobre la misma tabla.....

Me he equivocado al describir, no subconsultas, sino join sobre la misma tabla ;).

Saluditos

ivantj24 09-07-2011 17:49:10

caro muchas gracias pro la ayuda, le he intentado com odices pero al parecer fue un error mio por que genero la consulta, en el sql, y la hace pero nunca termina, como que se cicla o no se, y no me regresa ningun resultado, ya resolvi el problema, aunque me gaste demasiado codigo para resolverlo cosa que debo mejorar por que no es nada optimo, lo importante es que ya quedo aunque como repito gaste varias lineas de codigo :(, muchas gracias caro por la ayuda, saludos

fjcg02 10-07-2011 15:02:00

hola,
no se si sabrás que hay procedimientos almacenados que devuelven registros i gual que las consultas.

Por lo tanto, sólo tienes que enviarle la sql y la cantida de limite.

En el procedimiento, lo unico que tienes que hacer es asignar un cursor, ya a base de fetch ...next, sacr datos hasta que llegues al limite.

Lo unico que no sé es cómo puedes sacar la información de cada registro, ya que si haces un select por registro hasta que acabes, si no estoy equivocado saca las cabeceras.

Es buscar un poco y probar. En la red hay muchos sitios para buscar.

Saludos

Un ejemplo (parte de un SP)
Código SQL [-]
Declare Estado_Cursor CURSOR FOR
Select porcpartic,sumaporcpartic from dbo.T_Temp_Pareto
Open Estado_Cursor
Fetch next 
  from Estado_Cursor 
  into @PorcPartic, @SumaPorcPartic

While @@FETCH_STATUS = 0
Begin
  -- aqui haces lo que quieras ...
FETCH NEXT 
  FROM Estado_Cursor 
  into @Sublinea, @PorcPartic, @SumaPorcPartic
End
CLOSE Estado_Cursor
DEALLOCATE Estado_Cursor

ivantj24 11-07-2011 18:28:36

hola que tal fjcg02 muchisimas gracias pro tomarte tu tiempo, en realidad no se mucho sobre procedimientos almacenados, mas o menos utilizo uno para Folio, pero no los llevo a cabo muy seguido, te agradezco el codigo y lo revisare por que se que me puedo ahorrar demasiado codigo si los implemento en todos mis proyectos ya que en verdad que gaste lineas de codigo, asi que en verdad te agradesco la ayuda, y checare tu codigo :) muchas gracias y saludos


La franja horaria es GMT +2. Ahora son las 23:18:17.

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