Array
(
)

Calculos entre tabelas de acordo com a data

Edjborges
   - 26 set 2005

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)

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

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

Rjun
   - 27 set 2005

Qual o campo você precisa obter de acordo com a data?

Emerson
   - 27 set 2005

#Código

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...

Emerson
   - 27 set 2005

uma pequena modificação (mas não testei nenhum dos casos)

#Código

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


Edjborges
   - 27 set 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)