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

Como efetuar consulta com SUM e ORDER BY


Alan Cristensen

Pergunta

Olá pessoal estou com dificuldades na execução de um comando.

TENHO UMA TABELA QUE POSSUI O CODIGO DO FORNECEDOR E O VALOR DA NOTA FISCAL DE ENTRADA DE UMA COMPRA VINDA DESSE FORNECEDOR...

TAMBEM TENHO UMA OUTRA TABELA FORNECEDOR , COM O NOME DO FORNECEDOR...

TABELA MOVIMENTO

COD.FORNE | VALORDANOTA

1 | 200,00

2 | 209,00

1 | 405,69

1 | 748,15

2 | 100,71

3 | 50,25

FORNECEDOR

COD.FORNE | NOMEFANTASIA

1 | ITAUTEC

2 | CRISTENSEN SOFTWARES

3 | AZUL CARGO

POIS BEM , DEVO MOSTRAR NA CONSULTA O CODIGO DO FORNECEDOR, NOMEFORNECEDOR E O VALORNOTA.

SENDO QUE O CAMPO VALOR NOTA DEVE CONTER A SOMA DE TODAS AS NOTAS DE UM FORNECEDOR E AO FINAL DEVO ORDENAR ESTE VALOR NOTA EM O

ORDEM DECRESCENTE.

ASSIM TEREI OS 3 PRINCIPAIS FORNECEDORES ORDENADOS DE FORMA CRESCENTE.

COMO FAZER ISTO???

SELECT SUM(TMOV.VALORLIQUIDO) FROM TMOV GROUP BY TMOV.CODCFO;

PORQUE ELE não ACEITA ORDENACAO APOS GROUP BY

Editado por Alan Cristensen
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Alan,

O sql aceita sim a ordenação logo após o agrupamento.

Segue exemplo. Faça os testes e veja se é isto mesmo que deseja:

SELECT f.cod, f.NomeFantasia, SUM(m.ValordaNota) FROM MOVIMENTO m, FORNECEDOR f 
WHERE f.cod=f.cod GROUP BY m.cod ORDER BY 3 desc

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Alan,

O sql aceita sim a ordenação logo após o agrupamento.

Segue exemplo. Faça os testes e veja se é isto mesmo que deseja:

SELECT f.cod, f.NomeFantasia, SUM(m.ValordaNota) FROM MOVIMENTO m, FORNECEDOR f 
WHERE f.cod=f.cod GROUP BY m.cod ORDER BY 3 desc

OLA OLHA ESCREVI ASSIM :

SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO F

WHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO ORDER BY VALOR desc

E ESTA DANDO ERRO ASSIM :

Detalhes técnicos: Column 'FCFO.NOMEFANTASIA' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Invalid column name 'VALORDANOTA'.

LEMBRANDO QUE TENHO MAIS DE 100 FORNECEDORES NA TABELA FORNECEDORES....(VOCE FIXOU EM 3)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Alan,

Assim também dá, mas ficou faltando 1 campo na ordenação, por isso q está dando erro:

SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO F
WHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO, F.NomeFantasia ORDER BY VALOR desc

Ah, o número 3 significa que estou querendo ordernar o resultado de acordo com a terceira coluna, e não pegar as 3 primeiras linhas... :)

Como não tinha colocado alias, o sql daria erro se referenciasse a coluna do SUM. Como colocou o alias VALOR, poderá referencia-la no ORDER BY pelo nome (os dois jeitos estão corretos).

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Alan,

O sql aceita sim a ordenação logo após o agrupamento.

Segue exemplo. Faça os testes e veja se é isto mesmo que deseja:

SELECT f.cod, f.NomeFantasia, SUM(m.ValordaNota) FROM MOVIMENTO m, FORNECEDOR f 
WHERE f.cod=f.cod GROUP BY m.cod ORDER BY 3 desc

OLA OLHA ESCREVI ASSIM :

SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO F

WHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO ORDER BY VALOR desc

E ESTA DANDO ERRO ASSIM :

Detalhes técnicos: Column 'FCFO.NOMEFANTASIA' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Invalid column name 'VALORDANOTA'.

LEMBRANDO QUE TENHO MAIS DE 100 FORNECEDORES NA TABELA FORNECEDORES....(VOCE FIXOU EM 3)

MUITO OBRIGADO CARA CONSEGUI ASSIM AGORA AQUI ESTUDANDO MELHOR :

SELECT F.CODCFO, F.NOMEFANTASIA, SUM(M.VALORLIQUIDO) AS VALOR FROM TMOV M, FCFO F WHERE F.CODCFO=M.CODCFO GROUP BY F.CODCFO, F.NOMEFANTASIA ORDER BY VALOR DESC

SÓ ME EXPLICA PORQUE A GENTE TEM QUE AGRUPAR OS CAMPOS QUE A GENTE COLOCA NO SELECT QUANDO USAMOS GROUP BY

Link para o comentário
Compartilhar em outros sites

  • 0

beleza Alan...

Quanto a sua dúvida o entendimento é bem simples, mas é um pouco complicado de explicar... rs. Vamos lá:

Neste caso:

SELECT F.CODCFO, SUM(M.VALORLIQUIDO) AS VALOR FROM TMOV M, FCFO F WHERE F.CODCFO=M.CODCFO GROUP BY F.CODCFO ORDER BY VALOR DESC
O sql fixa o campo CODCFO e vai somando os valores contidos no campo VALORLIQUIDO. Até ai tudo bem. Mas se fizer desta forma:
SELECT F.CODCFO, F.NOMEFANTASIA, SUM(M.VALORLIQUIDO) AS VALOR FROM TMOV M, FCFO F WHERE F.CODCFO=M.CODCFO GROUP BY F.CODCFO ORDER BY VALOR DESC

O sql fixa o campo CODCFO, vai somando os valores contidos no campo VALORLIQUIDO e faz o que com o campo NOMEFANTASIA? você não especifica no comando o que o sql deve fazer com este campo. O sql terá que retornar o campo na consulta, mas não conseguirá montar a visualização destas informações. Sendo assim, ele retorna o erro. É como se você quisesse contar as laranjas, num balde que tenha laranjas e maças. O sql apenas perguntaria: tudo bem, eu contato as laranjas, mas o que faço com as maças? Vou te mostrar uma coluna contendo laranjas, seu total, e como vou montar a coluna maça?

Um exemplo simples também é você fazer um join entre 2 tabelas, onde as 2 tenham nomes de colunas iguais. Se você não referenciar a coluna de qual tabela está "falando", o sql dará erro. É a mesma coisa de perguntar: qual a coluna de qual tabela você quer?

Caso não tenha entendido, posta ai q tento explicar de outra forma... :)

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...