Ir para conteúdo
Fórum Script Brasil
  • 0

Somatório de resultado de cálculo


Gabriel Cabral

Pergunta

Oi gente.

Preciso calcular as somatórias de valores de produtos vendidos, para gerar um relatório.

Mas tenho encontrado problemas... vejam:

with dmRel.QueryRelProVen do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT VENCOD, VENDES, SUM(VENQTD) AS QTDE, ');
        SQL.Add('SUM(VENTOT) AS TOTAL, SUM(VENCUS) AS CUSTO, ');
        SQL.Add('SUM((VENTOT-(VENCUS*VENQTD))) AS MARGEM FROM ESTAVEN.dbf');
        SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin');
        SQL.Add('AND VENCAN IS NULL');
        SQL.Add('AND VENFLA IS NOT NULL');
        SQL.Add('GROUP BY VENCOD, VENDES');

        ParamByName('pDataIni').AsDateTime := StrToDateTime(txtRelProVen_DataIni.Text);
        ParamByName('pDataFin').AsDateTime := StrToDateTime(txtRelProVen_DataFin.Text);

        Open;
      end;
Quando eu calculava a somatória do campo VENTOT, o resultado saía perfeito. O total ficava em torno de 37.000 _____________________________ Mas precisei realizar um cálculo na instrução, para subtrair o valor das compras que tiverem desconto, então ficou dessa forma:
with dmRel.QueryRelProVen do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT VENCOD, VENDES, SUM(VENQTD) AS QTDE, ');
        SQL.Add('SUM(VENTOT-((VENTOT*VENDSC)/100)) AS TOTAL, SUM(VENCUS) AS CUSTO, ');
        SQL.Add('SUM((VENTOT-(VENCUS*VENQTD))) AS MARGEM FROM ESTAVEN.dbf');
        SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin');
        SQL.Add('AND VENCAN IS NULL');
        SQL.Add('AND VENFLA IS NOT NULL');
        SQL.Add('GROUP BY VENCOD, VENDES');

        ParamByName('pDataIni').AsDateTime := StrToDateTime(txtRelProVen_DataIni.Text);
        ParamByName('pDataFin').AsDateTime := StrToDateTime(txtRelProVen_DataFin.Text);

        Open;
      end;

Mas assim, a query só retorna um resultado.

E quando eu fui ver, ela retornou 6,48 ... que é o valor do campo VENTOT do primeiro registro.

Como o VENDSC era zero, a conta realizada me pareceu que foi feita normalmente, mas parece que só foi selecionado o primeiro registro.

Alguém consegue identificar o que pode estar acontecendo?

Muito obrigado.

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Então... me disseram pra tentar utilizar subconsultas... mas não obtive sucesso ainda... olhem só:

Antes estava assim:

SQL.Add('SELECT VENCOD, VENDES, SUM(VENQTD) AS QTDE, ');
SQL.Add('SUM(VENTOT-((VENTOT*VENDSC)/100)) AS TOTAL, SUM(VENCUS) AS CUSTO, ');
SQL.Add('SUM((VENTOT-(VENCUS*VENQTD))) AS MARGEM FROM ESTAVEN.dbf');
SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin');
SQL.Add('AND VENCAN IS NULL');
SQL.Add('AND VENFLA IS NOT NULL');
SQL.Add('GROUP BY VENCOD, VENDES');
Então mudei e ficou assim:
SQL.Add('SELECT((SELECT SUM (VENTOT) FROM ESTAVEN)-(SELECT(((SELECT SUM(VENTOT)FROM ESTAVEN)*(SELECT SUM(VENDSC) FROM ESTAVEN))/100) FROM ESTAVEN)) AS TOTAL, ');
SQL.Add('VENCOD, VENDES, SUM(VENQTD) AS QTDE, SUM(VENCUS) AS CUSTO FROM ESTAVEN.dbf');
SQL.Add('WHERE VENDAT BETWEEN :pDataIni AND :pDataFin');
SQL.Add('AND VENCAN IS NULL');
SQL.Add('AND VENFLA IS NOT NULL');
SQL.Add('GROUP BY VENCOD, VENDES');

Mas aí deu a seguinte mensagem:

Single row subquery produced more than one row

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...