Sumar columnas
¿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%
Ejemplo:
Cliente Venta Porc.% Suma%
01 1,500 1.5% 1.5%
02 3,500 2% 3.5%
10 5,500 4.5% 8%
Respuesta de brownsea
1
1
brownsea, Consultor BI DBA SQL Analista Senior
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.
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.
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.
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.
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.
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,
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,
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
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
- Compartir respuesta
- Anónimo
ahora mismo