Alan Cristensen Postado Junho 22, 2012 Denunciar Share Postado Junho 22, 2012 (editado) 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 MOVIMENTOCOD.FORNE | VALORDANOTA 1 | 200,00 2 | 209,00 1 | 405,69 1 | 748,15 2 | 100,71 3 | 50,25FORNECEDOR COD.FORNE | NOMEFANTASIA 1 | ITAUTEC 2 | CRISTENSEN SOFTWARES 3 | AZUL CARGOPOIS 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 OORDEM 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 Junho 22, 2012 por Alan Cristensen Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 25, 2012 Denunciar Share Postado Junho 25, 2012 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alan Cristensen Postado Junho 25, 2012 Autor Denunciar Share Postado Junho 25, 2012 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 descOLA OLHA ESCREVI ASSIM :SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO FWHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO ORDER BY VALOR descE 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) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 25, 2012 Denunciar Share Postado Junho 25, 2012 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). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alan Cristensen Postado Junho 25, 2012 Autor Denunciar Share Postado Junho 25, 2012 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 descOLA OLHA ESCREVI ASSIM :SELECT M.CODCFO, F.NomeFantasia, SUM(M.ValordaNota) AS VALOR FROM TMOV M, FCFO FWHERE M.CODCFO=F.CODCFO GROUP BY M.CODCFO ORDER BY VALOR descE 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Junho 25, 2012 Denunciar Share Postado Junho 25, 2012 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... :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Alan Cristensen
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 CristensenLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
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.