none
Consulta SQL não está agrupando valores RRS feed

  • Pergunta

  • Boa tarde pessoal!

    Estou tentando fazer um select com SUM, porém ele está retornando o select com várias linhas e gostaria que retornasse com uma linha somente e o valor total do SUM, para cada registro. Atualmente ele está retornando cada ocorrência de VALORTOTALRECEBER da tabela GLGL_DOCUMENTOS, ao invés de colocar uma linha só com o Manifesto, Data, Viagem, Status e a soma total do VALORTOTALRECEBER. Parece que ele não está agrupando. O select atual segue abaixo:

    select  B.NUMERO as Manifesto,A.INICIOEFETIVO as Data,A.NUMEROVIAGEM as Viagem,C.NOME as Status,SUM(VALORTOTALRECEBER) AS Valor

    from GLOP_VIAGENS A
    INNER JOIN GLOP_VIAGEMMANIFESTOS B ON A.HANDLE=B.VIAGEM
    INNER JOIN GLGL_ENUMERACAOITEMS C ON A.STATUS=C.HANDLE
    INNER JOIN GLOP_VIAGEMDOCUMENTOS D ON A.HANDLE=D.VIAGEM
    INNER JOIN GLGL_DOCUMENTOS E ON D.DOCUMENTOLOGISTICA=E.HANDLE

    WHERE
    A.TIPOVIAGEM=170
    AND A.STATUS IN (180, 181, 293)
    AND E.STATUS IN (259,315,225,226,224,302,890,227,603,420,228,465,313,404,609,743,314,234,625,219,221,229,223,439,231,230,235,222)

    GROUP BY B.NUMERO,A.INICIOEFETIVO,A.NUMEROVIAGEM,C.NOME,E.VALORTOTALRECEBER

    ORDER BY A.NUMEROVIAGEM

    Quando eu aplico a consulta abaixo ela me retorna com o valor somado certinho, do jeito que quero, mas fica sem os outros dados que preciso:

    select  SUM(VALORTOTALRECEBER) AS Valor

    from GLOP_VIAGENS A
    INNER JOIN GLOP_VIAGEMMANIFESTOS B ON A.HANDLE=B.VIAGEM
    INNER JOIN GLGL_ENUMERACAOITEMS C ON A.STATUS=C.HANDLE
    INNER JOIN GLOP_VIAGEMDOCUMENTOS D ON A.HANDLE=D.VIAGEM
    INNER JOIN GLGL_DOCUMENTOS E ON D.DOCUMENTOLOGISTICA=E.HANDLE

    WHERE
    A.TIPOVIAGEM=170
    AND E.STATUS IN (259,315,225,226,224,302,890,227,603,420,228,465,313,404,609,743,314,234,625,219,221,229,223,439,231,230,235,222)
    AND A.NUMEROVIAGEM='2013/002476-1'


    Desde já, muito obrigado!!

    segunda-feira, 29 de abril de 2013 20:55

Todas as Respostas

  • Marcelo,

    Todos os campos que você colocou no SELECT serão usados pelo GROUP BY para realizar a soma.

    Se você está recebendo várias linhas é porque os campos NUMERO, INICIOEFETIVO, NUMEROVIAGEM e NOME possuem valores diferentes e ai vem uma linha para cada "combinação" entre esses campos.


    Se quiser, poste o resultado aqui e eu tento te explicar isso melhor baseado nele.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    segunda-feira, 29 de abril de 2013 21:00
  • Boa tarde,

    Marcelo, tente remover a coluna E.VALORTOTALRECEBER da clausula Group By.

    Espero que ajude.


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

    segunda-feira, 29 de abril de 2013 21:10
  • Pessoal,

    Boa tarde!

    Consegui resolver da seguinte forma:

    select B.NUMERO as Manifesto,A.INICIOEFETIVO as Data,A.NUMEROVIAGEM as Viagem,C.NOME as Status,SUM(VALORTOTALRECEBER) AS Valor, SUM(VALORTOTALRECEBER)*20/100 AS Comissao

    from GLOP_VIAGENS A
    INNER JOIN GLOP_VIAGEMMANIFESTOS B ON A.HANDLE=B.VIAGEM
    INNER JOIN GLGL_ENUMERACAOITEMS C ON A.STATUS=C.HANDLE
    INNER JOIN GLOP_VIAGEMDOCUMENTOS D ON A.HANDLE=D.VIAGEM
    INNER JOIN GLGL_DOCUMENTOS E ON D.DOCUMENTOLOGISTICA=E.HANDLE

    WHERE
    EXISTS(select  SUM(VALORTOTALRECEBER) AS Valor
    from GLOP_VIAGENS F
    INNER JOIN GLOP_VIAGEMDOCUMENTOS G ON F.HANDLE=G.VIAGEM
    INNER JOIN GLGL_DOCUMENTOS H ON G.DOCUMENTOLOGISTICA=H.HANDLE)

    AND A.REDESPACHADOR=1204
    AND A.TIPOVIAGEM=170
    AND A.STATUS IN (180, 181, 293)
    AND E.STATUS IN (259,315,225,226,224,302,890,227,603,420,228,465,313,404,609,743,314,234,625,219,221,229,223,439,231,230,235,222)

    GROUP BY B.NUMERO,A.INICIOEFETIVO,A.NUMEROVIAGEM,C.NOME

    ORDER BY A.NUMEROVIAGEM

    Obrigado pela atenção!!!

    quinta-feira, 2 de maio de 2013 15:17