none
GROUP BY RRS feed

  • Pergunta

  • Bom dia, dias atras postei uma pergunta sobre como montar a query, e fui acertando.. Depois alguns usuários me esclareceram algumas questões quanto a group by.

    Como eu estava testando a query na minha base de testes, ao passar para produção, os valores mudaram um pouco.. Veio uma empresa duas vezes.. Sendo que minha intenção ao montar a query fosse que as duas somassem e viesse apenas uma vez.

    Na base eu uso o codigo da empresa e loja..

    Empresa 0012 loja 01
    Empresa 0012 loja 02    
    Claro que cada empresa contendo o seu CNPJ.

    Assim está a query que estou usando.

    SELECT TOP(10) A1_NREDUZ,FT_CLIEFOR,FT_PRODUTO,SUM(FT_QUANT) AS QUANTIDADE,SUM(FT_TOTAL) AS TOTAL
    FROM SFT010INNER JOIN SA1010 ON FT_CLIEFOR = A1_COD AND FT_LOJA = A1_LOJA
    WHERE SFT010.D_E_L_E_T_ = '' AND FT_EMISSAO >= '20130101' AND FT_EMISSAO <= '20130430' AND FT_ESPECIE = 'SPED' AND FT_TIPOMOV = 'S' AND FT_DTCANC = '' AND FT_CFOP NOT IN ('5923','5910','5151','5152','6151','6152')
    GROUP BY A1_NREDUZ,FT_CLIEFOR,FT_PRODUTO
    ORDER BY TOTAL Desc


    • Editado Letícia6 segunda-feira, 13 de maio de 2013 12:52
    segunda-feira, 13 de maio de 2013 12:50

Respostas

  • Então.. resolvi retirar a coluna produto mesmo da query.

    Ficando assim a query.

    SELECT TOP(10) SA1010.A1_NOME,SUM(FT_QUANT) AS QUANTIDADE,SUM(FT_TOTAL) AS TOTAL FROM SFT010
    INNER JOIN SA1010 ON FT_CLIEFOR = A1_COD AND FT_LOJA = A1_LOJA
    WHERE SFT010.D_E_L_E_T_ = '' AND FT_EMISSAO >= '20130101' AND FT_EMISSAO <= '20130430' AND FT_ESPECIE = 'SPED' AND FT_TIPOMOV = 'S' AND FT_DTCANC = '' AND FT_CFOP NOT IN ('5923','5910','5151','5152','6151','6152')
    GROUP BY A1_NOME
    ORDER BY TOTAL Desc

    A parte do join com código e loja é para a query pegar o cliente e a loja corretos, pois tirando a loja do inner join vem valores errados.. 

    Agora alguns podem me perguntar como seu que a soma está correta.

    Peguei apenas um cliente e somei tudo da tabela SFT010 usando a mesma parte do where da query acima.

    SELECT SUM(FT_TOTAL) AS Totais FROM SFT010 
    WHERE FT_CLIEFOR = '00614' AND SFT010.D_E_L_E_T_ = '' AND FT_EMISSAO >= '20130101' AND FT_EMISSAO <= '20130430' AND FT_ESPECIE = 'SPED' AND FT_TIPOMOV = 'S' AND FT_DTCANC = '' AND FT_CFOP NOT IN ('5923','5910','5151','5152','6151','6152')

    E a soma para esse único cliente deu exatamente o mesmo valor que a query principal está retornando.

    Obrigada a todos que me ajudaram, a não ser que eu esteja errada na minha lógica dou por encerrada.

    • Marcado como Resposta Giovani Cr quarta-feira, 9 de outubro de 2013 20:28
    terça-feira, 14 de maio de 2013 12:54

Todas as Respostas

  • Bom dia,

    Letícia, são agrupadas (somadas) somente as linhas que possuem o mesmo valor nas colunas que estão na clausula Group By, portanto as linhas que não foram somadas devem possuir valor diferente em pelo menos uma dessas colunas.

    Espero que ajude.


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

    segunda-feira, 13 de maio de 2013 13:29
  • O Problema está na coluna produto.. Como são produtos diferentes está saido duas vezes.. 

    Obrigada.

    segunda-feira, 13 de maio de 2013 13:29
  • Letícia, você conseguiu obter o resultado desejado?

    A princípio vai ser necessário remover a coluna Produto da query (Select e Group By).


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

    segunda-feira, 13 de maio de 2013 13:40
  • Deleted
    segunda-feira, 13 de maio de 2013 14:11
  • Então.. resolvi retirar a coluna produto mesmo da query.

    Ficando assim a query.

    SELECT TOP(10) SA1010.A1_NOME,SUM(FT_QUANT) AS QUANTIDADE,SUM(FT_TOTAL) AS TOTAL FROM SFT010
    INNER JOIN SA1010 ON FT_CLIEFOR = A1_COD AND FT_LOJA = A1_LOJA
    WHERE SFT010.D_E_L_E_T_ = '' AND FT_EMISSAO >= '20130101' AND FT_EMISSAO <= '20130430' AND FT_ESPECIE = 'SPED' AND FT_TIPOMOV = 'S' AND FT_DTCANC = '' AND FT_CFOP NOT IN ('5923','5910','5151','5152','6151','6152')
    GROUP BY A1_NOME
    ORDER BY TOTAL Desc

    A parte do join com código e loja é para a query pegar o cliente e a loja corretos, pois tirando a loja do inner join vem valores errados.. 

    Agora alguns podem me perguntar como seu que a soma está correta.

    Peguei apenas um cliente e somei tudo da tabela SFT010 usando a mesma parte do where da query acima.

    SELECT SUM(FT_TOTAL) AS Totais FROM SFT010 
    WHERE FT_CLIEFOR = '00614' AND SFT010.D_E_L_E_T_ = '' AND FT_EMISSAO >= '20130101' AND FT_EMISSAO <= '20130430' AND FT_ESPECIE = 'SPED' AND FT_TIPOMOV = 'S' AND FT_DTCANC = '' AND FT_CFOP NOT IN ('5923','5910','5151','5152','6151','6152')

    E a soma para esse único cliente deu exatamente o mesmo valor que a query principal está retornando.

    Obrigada a todos que me ajudaram, a não ser que eu esteja errada na minha lógica dou por encerrada.

    • Marcado como Resposta Giovani Cr quarta-feira, 9 de outubro de 2013 20:28
    terça-feira, 14 de maio de 2013 12:54