Jump to content
Fórum Script Brasil
  • 0

Como efetuar consulta com SUM e ORDER BY


Alan Cristensen
 Share

Question

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

Edited by Alan Cristensen
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.8k
×
×
  • Create New...