Fórum Select Curvas ABC de Clientes #590243
03/01/2018
0
Olá pessoal, estou fazendo um relatório de Curvas ABC de Clientes, porém não consegui gerar as colunas de Percentual Acumulado e a Classificação.
Tenho as seguintes colunas:
cli_id = Código do Cliente ,
cli_razao = Razão Social do Cliente ,
total_pedido = Valor Total dos Pedidos Faturados ,
valor_vista = Valor A Vista dos Pedidos Faturados ,
cr_baixado = Valor Total Baixado do Contas a Receber,
recebido = valor_vista + cr_baixado,
cr_aberto = Valor Total Aberto do Contas a Receber,
total_recebido = Valor total Geral de Recebiveis do Ano,
Percentual Individual = recebido / total_recebido * 100 ,
Percentual Acumulado = Percentual Individual + Percentual Individual do Registro Anterior,
Classificação = Classificação dos registros (A = 80% do Percentual Acumulado, B = 95% do Percentual Acumulado, C = 100% do Percentual Acumulado )
Banco de dados = Firebird 2.5
Criei a Store Procedure
Select que estou utilizando
Tenho as seguintes colunas:
cli_id = Código do Cliente ,
cli_razao = Razão Social do Cliente ,
total_pedido = Valor Total dos Pedidos Faturados ,
valor_vista = Valor A Vista dos Pedidos Faturados ,
cr_baixado = Valor Total Baixado do Contas a Receber,
recebido = valor_vista + cr_baixado,
cr_aberto = Valor Total Aberto do Contas a Receber,
total_recebido = Valor total Geral de Recebiveis do Ano,
Percentual Individual = recebido / total_recebido * 100 ,
Percentual Acumulado = Percentual Individual + Percentual Individual do Registro Anterior,
Classificação = Classificação dos registros (A = 80% do Percentual Acumulado, B = 95% do Percentual Acumulado, C = 100% do Percentual Acumulado )
Banco de dados = Firebird 2.5
Criei a Store Procedure
CREATE PROCEDURE SP_CURVAS_CLIENTES (
ano smallint)
returns (
cli_id integer,
cli_razao varchar(120),
total_pedido numeric(18,2),
valor_vista numeric(18,2),
cr_baixado numeric(18,2),
cr_aberto numeric(18,2),
recebido numeric(18,2),
total_recebido numeric(18,2))
as
BEGIN
FOR
select
clientes.cli_id,
clientes.cli_razao,
(select
coalesce(sum(pedidos.ped_total),0)
from pedidos
where
pedidos.status = 1 and pedidos.cli_id = clientes.cli_id and
pedidos.tipo_id not in(100,5) and
extract(year from pedidos.data_emissao) = :ano) as total_pedido,
(select
coalesce(sum(iif(fpgto_id = 1, coalesce(total1,0),
iif(fpgto_id2 = 1, coalesce(total2,0),
iif(fpgto_id3 = 1, coalesce(total3,0),0)
)
)),0)
from pedidos
where
pedidos.status = 1 and pedidos.cli_id = clientes.cli_id and
pedidos.tipo_id not in(100,5) and
extract(year from pedidos.data_emissao) = :ano ) as total_avista,
coalesce((select sum(cr.conrec_valor_pago) from contasreceber cr
where cr.status = 1 and cr.cli_id = clientes.cli_id and
extract(year from cr.data_emissao) = :ano),0) as cr_baixado,
coalesce((select sum(cr.conrec_valor_parcela) from contasreceber cr
where cr.status = 0 and cr.cli_id = clientes.cli_id and
extract(year from cr.data_emissao) = :ano),0) as cr_aberto,
sum((select
coalesce(sum(iif(fpgto_id = 1, coalesce(total1,0),
iif(fpgto_id2 = 1, coalesce(total2,0),
iif(fpgto_id3 = 1, coalesce(total3,0),0)
)
)),0)
from pedidos
where
pedidos.status = 1 and
pedidos.tipo_id not in(100,5) and
extract(year from pedidos.data_emissao) = :ano ) +
coalesce((select sum(cr.conrec_valor_pago) from contasreceber cr
where cr.status = 1 and
extract(year from cr.data_emissao) = :ano),0))
from clientes
group by 1,2
INTO :CLI_ID,
:CLI_RAZAO,
:TOTAL_PEDIDO,
:VALOR_VISTA,
:cr_baixado,
:CR_ABERTO,
:total_recebido
DO
BEGIN
recebido = :valor_vista + :cr_baixado;
SUSPEND;
END
END
Select que estou utilizando
select
cli_id ,
cli_razao ,
total_pedido ,
valor_vista ,
cr_baixado ,
recebido ,
cr_aberto,
total_recebido,
recebido / total_recebido * 100 as perc_individual,
0.00 as perc_acumulado,
'' as classificacao
from SP_CURVAS_CLIENTES(2017)
where
recebido > 0
order by recebido desc
Sidney Abreu
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)