Calculos entre tabelas de acordo com a data
Pessoal estou usando o select abaixo, que me retorna uma pesquisa na tabela de vendas, agrupando as vendas por grupo de produtos, me retornando o total faturado e a comissão a ser paga, de acordo com a MetaMensal: (Uso SQL Server 7, com delphi 7)
[color=green:8704fbe5e3]
SELECT
Descricao_Cls,
MetaMensal_Cld, ComisVend_Cld, Sum(Valor_Ven) as ValorFaturado,
CASE
WHEN Sum(Valor_Ven) >= MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Acima_Cld)/100)
WHEN Sum(Valor_Ven) < MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Abaixo_Cld)/100)
END AS Comissao
FROM
ClassificacaoProduto
LEFT JOIN
Produto ON Codigo_Cls = Classificacao_prod
LEFT JOIN
Vendas ON Produto_Ven=Codigo_Prod
LEFT JOIN
ClassificacaoProdDetalhes ON Codigo_cls=Codigo_Cld
GROUP BY
Descricao_Cls,
MetaMensal_Cld,
ComisVend_Cld [/color:8704fbe5e3]
Agora tenho um detalhe que está complicado, pode ocorrer o caso, onde será solicitado o relatório de tres meses por exemplo, até aí tudo bem é só filtrar a data da venda, o problema é que na tabela de parâmetros, ClassificacaoProdDetalhes, onde sao gravadas as metas, comissão do grupo de produtos, tbm é por data, por exemplo, cadastro um parâmetro com data de 01/07/2005, isso significa que todas as vendas a partir de 01/07/2005 devem seguir estes parâmetros, se eu cadastrar outros parâmetros em 01/08/2005, a vendas de 01/07/2005 até 31/07/2005 devem seguir os parâmetros de 01/07/2005 e as vendas a partir de 01/08/2005 devem seguir os parâmetros de 01/08/2005.
Espero ter sido claro, e se puderem me ajudar ficarei grato.
Um abraço a todos
[color=green:8704fbe5e3]
SELECT
Descricao_Cls,
MetaMensal_Cld, ComisVend_Cld, Sum(Valor_Ven) as ValorFaturado,
CASE
WHEN Sum(Valor_Ven) >= MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Acima_Cld)/100)
WHEN Sum(Valor_Ven) < MetaMensal_Cld THEN (Sum(Valor_Ven)*(ComisVend_Cld*Abaixo_Cld)/100)
END AS Comissao
FROM
ClassificacaoProduto
LEFT JOIN
Produto ON Codigo_Cls = Classificacao_prod
LEFT JOIN
Vendas ON Produto_Ven=Codigo_Prod
LEFT JOIN
ClassificacaoProdDetalhes ON Codigo_cls=Codigo_Cld
GROUP BY
Descricao_Cls,
MetaMensal_Cld,
ComisVend_Cld [/color:8704fbe5e3]
Agora tenho um detalhe que está complicado, pode ocorrer o caso, onde será solicitado o relatório de tres meses por exemplo, até aí tudo bem é só filtrar a data da venda, o problema é que na tabela de parâmetros, ClassificacaoProdDetalhes, onde sao gravadas as metas, comissão do grupo de produtos, tbm é por data, por exemplo, cadastro um parâmetro com data de 01/07/2005, isso significa que todas as vendas a partir de 01/07/2005 devem seguir estes parâmetros, se eu cadastrar outros parâmetros em 01/08/2005, a vendas de 01/07/2005 até 31/07/2005 devem seguir os parâmetros de 01/07/2005 e as vendas a partir de 01/08/2005 devem seguir os parâmetros de 01/08/2005.
Espero ter sido claro, e se puderem me ajudar ficarei grato.
Um abraço a todos
Edjborges
Curtidas 0
Respostas
Rjun
26/09/2005
Qual o campo você precisa obter de acordo com a data?
GOSTEI 0
Emerson Nascimento
26/09/2005
Select Descricao_Cls, MetaMensal_Cld, ComisVend_Cld, Sum(ValorFaturado) ValorFaturado, Sum(Comissao) Comissao from (SELECT CP.Descricao_Cls, CPD.MetaMensal_Cld, CPD.ComisVend_Cld, Sum(VEN.Valor_Ven) as ValorFaturado, CASE WHEN Sum(VEN.Valor_Ven) >= CPD.MetaMensal_Cld THEN (Sum(VEN.Valor_Ven)*(CPD.ComisVend_Cld*CPD.Acima_Cld)/100) ELSE (Sum(VEN.Valor_Ven)*(CPD.ComisVend_Cld*CPD.Abaixo_Cld)/100) END AS Comissao FROM ClassificacaoProduto CP LEFT JOIN Produto PRD ON (PRD.Classificacao_prod = CP.Codigo_Cls) LEFT JOIN Vendas VEN ON (VEN.Produto_Ven = PRD.Codigo_Prod) LEFT JOIN (Select Top 1 * From ClassificacaoProdDetalhes CProd Where CProd = CP.Codigo_cls and CProd.Data <= VEN.DataDaVenda Order by CProd.Data desc) CPD ON (CPD.Codigo_Cld = CP.Codigo_cls) WHERE {período e demais condições aqui} GROUP BY CP.Descricao_Cls, CPD.MetaMensal_Cld, CPD.ComisVend_Cld) TabelaAgrupada Group by Descricao_Cls, MetaMensal_Cld, ComisVend_Cld
acho que assim funciona...
GOSTEI 0
Emerson Nascimento
26/09/2005
uma pequena modificação (mas não testei nenhum dos casos)
Select Descricao_Cls, MetaMensal_Cld, ComisVend_Cld, Sum(ValorFaturado) ValorFaturado, Sum(Comissao) Comissao from (SELECT CP.Descricao_Cls, CPD.MetaMensal_Cld, CPD.ComisVend_Cld, Sum(VEN.Valor_Ven) as ValorFaturado, CASE WHEN Sum(VEN.Valor_Ven) >= CPD.MetaMensal_Cld THEN (Sum(VEN.Valor_Ven)*(CPD.ComisVend_Cld*CPD.Acima_Cld)/100) ELSE (Sum(VEN.Valor_Ven)*(CPD.ComisVend_Cld*CPD.Abaixo_Cld)/100) END AS Comissao FROM ClassificacaoProduto CP LEFT JOIN Produto PRD ON (PRD.Classificacao_prod = CP.Codigo_Cls) LEFT JOIN Vendas VEN ON (VEN.Produto_Ven = PRD.Codigo_Prod) LEFT JOIN (Select Top 1 CProd.Codigo_Cld, CProd.MetaMensal_Cld, CProd.ComisVend_Cld, CProd.Acima_Cld, CProd.Abaixo_Cld From ClassificacaoProdDetalhes CProd Where CProd = CP.Codigo_cls and CProd.Data <= VEN.DataDaVenda Order by CProd.Data desc) CPD ON (CPD.Codigo_Cld = CP.Codigo_cls) WHERE {período e demais condições aqui} GROUP BY CP.Descricao_Cls, CPD.MetaMensal_Cld, CPD.ComisVend_Cld) TabelaAgrupada Group by Descricao_Cls, MetaMensal_Cld, ComisVend_Cld
GOSTEI 0
Edjborges
26/09/2005
Vários campos, como MetaMensal_Cld, ComisVend_Cld, todos os campos que uso no select provenientes da tabela ClassificacaoProdDetalhes. (que tem o final com _Cld)
GOSTEI 0