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

(Resolvido) somar e agrupar registros iguais


flavioavilela

Pergunta

bom dia a todos... tenho um form, onde trabalha com 3 tabelas.... (Funcionário_Plantio, Produtos_Plantio, Maquinas_Plantio)... o usuário pode ir colocando vários funcinoários, vários produtos e várias máquinas utilizadas, cada uma com seus valores, quantidades e tal e podendo ser vários itens repetidos, claro.... só que no relatório, eu gostaria de quando chamar esses funcionários, máquinas e produtos, eles virem agrupados, não repetindo os itens, e cada item com sua totalização de valor, quantidade e tal... na minha tela de consulta tenho 3 dbgrid onde é chamado os funcionários, produtos e máquinas e obvio, tenho 3 querys aqui... tentei dar um select nos campos que quero e depois colocar no group by o codigo_(funcionario, produto ou máquina) cada um pra sua query, mas não deu certo, não sei porque....

alguém ajuda....

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

8 respostass a esta questão

Posts Recomendados

  • 0

ai está o código:

select * from Funcionarios_Plantio FP where Codigo = :Codigo
group by FP.Codigo_Funcionario, FP.Codigo, FP.Codigo_Safra, FP.Codigo_Unidade, FP.Qtde, FP.Custo, FP.Sub_Total

neste exemplo é a tabela Funcionarios_Plantio... o usuário vai lançando vários funcionários e inclusive pode ir repetindo o mesmo..... ai, ele precisa agrupar pra aparecer apenas um de cada funcionário e somar todos os seus valores e quantidades..... desse jeito ele está agrupando, não está repetindo, mas não soma os valores nem quantidades saca....

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

  • 0

mas você ta simplesmente selecionando os registros, faltou fazer a totalizacao. tipo assim:

select FP.Codigo_Funcionario, FP.Codigo, FP.Codigo_Safra, FP.Codigo_Unidade, Sum(FP.Qtde) As Total_Qtde, Sum(FP.Sub_Total) As Valor_Total from Funcionarios_Plantio FP where Codigo = :Codigo
group by FP.Codigo_Funcionario, FP.Codigo, FP.Codigo_Safra, FP.Codigo_Unidade[/code]

so q é aquilo q eu falei. o campo chave da tabela não pode entrar na consulta. imagino q esse FP.Codigo seja um campo com valor unico pra cada registro na tabela Funcionarios_Plantio, certo?? então, ele não pode entrar no select (nem no group by), senao você vai agrupar pra cada registro (o mesmo q não agrupar).

Link para o comentário
Compartilhar em outros sites

  • 0

é meu amigo, não deu certo... vou postar o que fiz para os produtos... como já disse, tenho aqui uma tabela produtos, funcionários e máquinas...

select PP.Codigo, PP.Codigo_Produto, PP.Codigo_Safra, Sum(PP.Preco_RS) as preco_rs, sum(PP.Preco_S) as preco_s, sum(PP.Qtde) as qtde, sum(PP.Sub_Total_Rs) as sub_total_rs, sum(PP.Sub_Total_S) as sub_total_s from Produtos_Plantio PP where PP.Codigo = :Codigo group by PP.Codigo_Produto, PP.Codigo, PP.Codigo_Safra

ai na consulta, aparece os produtos tudo repetido... :blink:

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Flávio,

Alguns campos que estão no select não podem entrar na consulta (igual o Kuroi informou acima). Vou tentar explicar:

- Quando você utiliza o "Group By", o SQL pega os dados IGUAIS e agrupam.

- Se no seu SELECT estiver assim (apenas 1 campo):

CAMPO1

Dado1

Dado1

Dado1

Se você utilizasse o "Group By", ficaria assim:

CAMPO1

Dado1

Se você utilizasse o "Group By", com por exemplo o "Count" ficaria assim:

CAMPO1 | Contador

Dado1 | 3

Isto acontece porque os campos são iguais. Mas se você tiver um select no CAMPO1 junto com a CHAVE PRIMARIA, por exemplo (2 campos):

ID CAMPO1

1 | Dado1

2 | Dado1

3 | Dado1

Se utilizar o "Group By", como seria o resultado? .......

Exatamente este:

ID CAMPO1

1 | Dado1

2 | Dado1

3 | Dado1

Perceba que o SQL está agrupando os campos iguais. No campo ID, nenhum dado é igual, mesmo que no CAMPO1 etivesse com dados iguais.

Voltando ao seu Post...

Apenas o select....

select PP.Codigo, PP.Codigo_Produto, PP.Codigo_Safra, Sum(PP.Preco_RS) as preco_rs, sum(PP.Preco_S) as preco_s, sum(PP.Qtde) as qtde, sum(PP.Sub_Total_Rs) as sub_total_rs, sum(PP.Sub_Total_S) as sub_total_s ...
Tente retirar os códigos únicos e deixar apenas os campos que repetem. Ex.:
select Sum(PP.Preco_RS) as preco_rs, sum(PP.Preco_S) as preco_s, sum(PP.Qtde) as qtde, sum(PP.Sub_Total_Rs) as sub_total_rs, sum(PP.Sub_Total_S) as sub_total_s ...

Vá testando acrescentar e retirar campos.

Espero ter ajudado... :.)

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia pessoal!

tenho a mesma duvida do inicio do post porem com um nível a mais. tentei entender os códigos a cima mas ficou bem confuso pois sou bem iniciante o postgresql.

como muito custo consegui fazer uma VIEW com informações de três tabelas, mas ficou gigantesca por conta da repetição dos dados. agora preciso filtra-los.

vou explicar, espero que possam me ajudar.

 

tenho a seguinte VIEW.

demonstrativo_informaçoes

código_1      |        código_2          |            código_3          |          quantidade

01                            001                                 a                                     2

01                            001                                 a                                     4

01                            001                                 b                                     3

01                            001                                 b                                     9

01                            002                                 a                                     6

01                            002                                 a                                     8

01                            002                                 b                                    7

01                            002                                 b                                    5

02                            001                                 a                                    2

02                            001                                 a                                   7

02                            001                                 b                                   4

02                            001                                b                                    6

02                            002                                a                                    8

02                            002                                a                                   3

02                            002                                b                                   6

02                            002                                b                                   3

preciso que ela retorne a somatória das quantidades do código_3

ficando assim:

demonstrativo_informações2

código_1      |        código_2          |            código_3          |          quantidade

01                            001                                 a                                     6

01                            001                                 b                                     12

01                            002                                 a                                     14

01                            002                                 b                                     12

02                            001                                 a                                     9

02                            001                                 b                                     10

02                            002                                 a                                    11

02                            002                                 b                                    9

a tabela original esta me retornado 8000 linhas, se feita essa soma sobrarão pouco mas  de 100.

se puderem me ajudas e explicar um pouco sobre como o código funciona fico grato!

agradecido!

 

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
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...