Sumar columnas

Respuesta de
a
Usuario
Hola estimados expertos,
¿Me gustaría ir acumulando la Columna Suma en cada linea como puedo hacer esto?
Ejemplo:
Cliente Venta Porc.% Suma%
01 1,500 1.5% 1.5%
02 3,500 2% 3.5%
10 5,500 4.5% 8%
Gracias,
Avatar
Experto
Hola,
Para poder hacer lo que solicitas debes que hacer lo siguiente:
1. Tienes tu tabla sin la columna suma%
2. Declara una variable table con la estructura que propones inlcuyendo la columna que acumula suma%
3. Crea un cursor que lea registro por registro y debes tener una variable que acumule e inserte en la variable table
4. Una vez que recorras toda tu tabla origen y la insertes en la variable table tendrás tu dato acumulado por columna, no es difícil hacerlo, ahorita no tengo el sql porque estoy desde mi cel pero si tienes alguna duda puedes hacerme las consultas y te podre orientar.
Saludos.
Brownsea
Usuario
Gracias por tu respuesta,
 
Me gustaría explicarte el problema desde el origen pues así creo que me darás una mejor solución.
 
Actualmente tengo un procedimiento almacenado que me trae las ventas por clientes por vendedor dentro de un rango de fechas, las fechas son pasadas al procedimiento por los parámetros... fecha_inicio, Fecha_fin.
 
Con el resultado de este procedimiento construir in informe en Crystal Report, el cual lo tengo agrupado por Vendedor, Cliente, Factura.
 
En el grupo Cliente me trae la sumatoria de sus detalles en orden descendente, también le agregue la sumatoria de sus detalles pero en porcentajes. Ahora la gerencia de ventas una columna que vaya sumando los porcentajes por clientes con el objetivo de saber con cuantos clientes el vendedor logra el 80% de sus ventas.
 
Ejemplo: El reporte devuelve lo siguiente:
 
Vendedor Cliente Venta % %Acumulado
 
Grupo Vendedor: Vendedor 01-Carlos Rodriguez
 
                   Grupo Cliente: Hospital Dr. Dario Contrerras 25,100 50.09% 50.09%
 
                            NivelDetalle: Factura01 100
 
                                                     Factura02 5,000
                                                     Factura03 10,000
                                                     Factura04 4,000
                                                     Factura05 6,000
 
                                          :Hospital Plaza de la Salud 15,000 29.94% 80.03%
 
                                                    Factura06 4,000
 
                                                    Factura07 10,000
 
                                                    Factura08 1,000
 
                                                    Factura09 21,000
                                           :Hospital Luis Aybar 10,000 19.96.% 100%
                                                  Factura10 5,000
                                                  Factura11 5,000
 
SUBTOTAL X VENDEDEDOR                                  ==>  55,100  
 
Los valores subrayados los genera el reporte automáticamente con la opción summary... el valor que necesito acumular es %Acumulado.
 
Gracias, Muchas Gracias por tu ayuda.
 
            
Avatar
Experto
Hola,
Disculpa la demora, he estado ocupado, cuéntame si ya pudiste resolver el problema para intentar una solución en base a lo que enviaste.
Saludos
Brownsea
Usuario
Realmente me gustaría crear una consulta de la tabla FACTURA.
En la tabla factura tengo los siguientes campos:
factura.factura,factura.cliente,factura.vendedor,factura.fecha,factura.total_mercaderia
me gustaria agrupar las ventas por cliente ejemplo
select factura.vendedor,factura.cliente, sum(total_mercaderia) as total
from factura
where factura.fecha between '2008-06-01' and '2008-06-30'
group by factura.vendedor,factura.cliente
esto me devolveria lo siguiente:
Vendedor CLiente Venta % %Acumulado
P01 C0001 27,000
P01 C0002 50,000
P01 C0002 25,000
Los campo % y %Acumulado son los campos que me gustaría calcular
Gracias,
 
 
 
 
Avatar
Experto
Hola,
Bueno me tome un tiempo para ayudarte con tu qry, en el código que esta abajo, asume que la variable tabla que he creado es el resultado de tu query luego de hacer el group by, y luego los resultados lo inserto en otra variable tabla llamada @factura_resultado, cópialo y pégalo y veras que cumple lo que solicitas, espero te sirva:
declare @factura table (vendedor char(3), cliente char(4), venta int)
declare @factura_resultado table (vendedor char(3), cliente char(4), venta int, porcentaje decimal(18,4), acumulado decimal(18,4))
insert into @factura values ('P01', 'C001', 10)
insert into @factura values ('P01', 'C002', 20)
insert into @factura values ('P01', 'C003', 30)
insert into @factura values ('P01', 'C004', 40)
declare @total decimal(18,4), @acumulado decimal(18,4)
set    @acumulado= 0
select    @total= sum(venta)
FROM    @factura
declare @vendedor char(3), @cliente char(4), @venta int
DECLARE RS_VAR CURSOR FOR
    select    vendedor, cliente, venta
    from    @factura
OPEN RS_VAR
FETCH NEXT FROM RS_VAR INTO @vendedor, @cliente, @venta
--set    @acumulado= @acumulado
WHILE @@FETCH_STATUS=0
BEGIN
    insert into @factura_resultado
    values(@vendedor, @cliente, @venta, (@venta/@total)*100.0, (@venta/@total)*100.0+ @acumulado)
    set    @acumulado= @acumulado+ @venta/@total*100.0
FETCH NEXT FROM RS_VAR INTO @vendedor, @cliente, @venta
END
CLOSE RS_VAR
DEALLOCATE RS_VAR
select    *
from    @factura_resultado
Saludos.
Brownsea
Usuario
wao, excelente... QUE DIOS TE BENDIGA.