none
Duvida com sum() em select RRS feed

  • Pergunta

  • fiz esse select, esta errado mais não sei como acertar, o valor retornado no count() e no sum()

    Select top 5  a.ven_codigo, a.cad_cliente cliente,
    c.cad_razao, count(a.ven_codigo) as qtvenda, sum(b.vpr_qtde) as qtProduto,
    sum(a.ven_total) as valorVenda from venda a
    left Join cadastro c on a.cad_cliente = c.cad_codigo
    left Join  vendaproduto b on a.ven_codigo = b.ven_codigo
    Where Coalesce(a.ven_cancelada,0) = 0
    and a.ven_data >= '2017-01-01'
    and a.ven_data <= '2017-01-31'
    Group By 1,2,3
    Order By valorVenda desc

    O que preciso retornar nesse select?

    r: pegar as 5 maiores Clientes em um determinado período. No primeiro count() tenho que trazer quantidade de vendas que o cliente fez, o primeiro sum(), quantas unidades esse cliente comprou, no segundo sum() o valor em reais que o cliente comprou

    Alguém pode me dar um rumo.

    • Tipo Alterado Junin incipiente quarta-feira, 22 de novembro de 2017 11:37 Encerrado
    terça-feira, 21 de novembro de 2017 18:24

Respostas

Todas as Respostas

  • amigo, preciso de um pouco mais de detalhes para poder te ajudar.

    pelo que vi, vc está fazendo um join da tabela venda (a), com cadastro (c) e vendaproduto (b).

    o que tem na tabela venda?

    o que tem na tabela cadastro?

    o que tem na tabela vendaproduto?

    poderia dar um exemplo mais claro para que eu possa simular e poder te ajudar?

    na tabela vendaproduto tem o codigo do cliente e a quantidade dos produtos com os valores, correto?

    terça-feira, 21 de novembro de 2017 19:58
  • Boa noite,

    Junin, experimente dessa forma:

    Select top 5  
        a.cad_cliente cliente,
        c.cad_razao, 
        count(a.ven_codigo) as qtvenda, 
        sum(b.vpr_qtde) as qtProduto,
        sum(a.ven_total) as valorVenda 
    from venda a
    left Join cadastro c on a.cad_cliente = c.cad_codigo
    left Join  vendaproduto b on a.ven_codigo = b.ven_codigo
    Where 
        Coalesce(a.ven_cancelada,0) = 0 and 
        a.ven_data >= '2017-01-01' and 
        a.ven_data <= '2017-01-31'
    Group By 
        a.cad_cliente,
        c.cad_razao
    Order By 
        valorVenda desc

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 21 de novembro de 2017 22:34
  • Deleted
    terça-feira, 21 de novembro de 2017 23:03
  • No primeiro count(), tenho que mostrar a quantidade de vezes que o cliente efetuou a compra
    quarta-feira, 22 de novembro de 2017 10:07
  • quarta-feira, 22 de novembro de 2017 10:37
  • ja tinha tentado dessa maneira, não obtive o resultado esperado

    quarta-feira, 22 de novembro de 2017 10:38
  • Foi feitas perguntas que estão sem respostas.(Fernando.Jarcen)

    Nos mostre o diagrama de como essas tabelas estão re relacionando ,

    acredito que esse  campo SUM(a.ven_total) AS valorVenda esteje  errado. 

    a soma (valorVenda) deveria vir ta tabela  vendaproduto,

    de qualquer maneira  se essa query não retornar o que vc deseja  nos retorne a estrutura das tabelas

    venda,cadastro, vendaproduto

    SELECT TOP 5
        a.cad_cliente cliente,
        COUNT(a.ven_codigo) AS qtvenda,
        SUM(b.vpr_qtde) AS qtProduto,
        SUM(a.ven_total) AS valorVenda
    FROM venda a
        LEFT JOIN cadastro c ON a.cad_cliente = c.cad_codigo
        LEFT JOIN vendaproduto b ON a.ven_codigo = b.ven_codigo
    WHERE COALESCE(a.ven_cancelada, 0) = 0
          AND a.ven_data >= '2017-01-01'
          AND a.ven_data <= '2017-01-31'
    GROUP BY a.cad_cliente
    ORDER BY valorVenda DESC;

    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"






    Wesley Neves

    quarta-feira, 22 de novembro de 2017 11:23
  • Junin, segue outra sugestão para teste:

    Select top 5  
        a.cad_cliente cliente,
        c.cad_razao, 
        count(a.ven_codigo) as qtvenda, 
        sum(qtProduto) as qtProduto,
        sum(a.ven_total) as valorVenda 
    from venda a
    left Join cadastro c on a.cad_cliente = c.cad_codigo
    cross apply
    (
        select sum(b.vpr_qtde) as qtProduto 
        from vendaproduto b 
        where b.ven_codigo = a.ven_codigo
        
    ) as ca
    Where 
        Coalesce(a.ven_cancelada,0) = 0 and 
        a.ven_data >= '2017-01-01' and 
        a.ven_data <= '2017-01-31'
    Group By 
        a.cad_cliente,
        c.cad_razao
    Order By 
        valorVenda desc

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 22 de novembro de 2017 11:44
  • Deleted
    quinta-feira, 23 de novembro de 2017 15:07