edutraini Posted July 6, 2022 Report Share Posted July 6, 2022 Bom dia, Pessoal Estou com uma dificuldade em um select usando o group tenho uma tabela de produtos conforme exemplo abaixo select lote,tipo,secao,bitola,acab,sum(estqatual) as estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k FROM dpropro0 where tipo = '52100' and COALESCE(dpropro0.SR_DELETED,' ') <> 'T' GROUP BY lote,tipo,secao,bitola,acab,estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k ORDER BY tipo,secao,bitola Lote | seq | tipo de aco | secao | estqatual | e outros campos 001-001-01-01 | 001 | 52100 | redondo | 100.00 | 001-001-01-01 | 002 | 52100 | redondo | 200.00 | 001-001-01-01 | 003 | 52100 | redondo | 150,00 | Gostaria de jogar no browse somente a soma do estoque de cada lote lote | tipo de aco | secao |estqatual 001-001-01-01 | 52100 | redondo | 450,00 mas o resultado ainda vem como 001-001-01-01 | 001 | 52100 | redondo | 100.00 | 001-001-01-01 | 002 | 52100 | redondo | 200.00 | 001-001-01-01 | 003 | 52100 | redondo | 150,00 | talvez por causa de varios campos no group Ai vem a pergunta estou usando o comando errado ou exite alguma outra forma Agradeço muito Edu Quote Link to comment Share on other sites More sharing options...
edutraini Posted July 6, 2022 Author Report Share Posted July 6, 2022 2 horas atrás, edutraini disse: Gostaria de jogar no browse somente a soma do estoque de cada lote Quote Link to comment Share on other sites More sharing options...
macs Posted July 6, 2022 Report Share Posted July 6, 2022 Faz um backup desta tabela pra podermos entender melhor e poder te ajudar. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 6, 2022 Report Share Posted July 6, 2022 Olá, boa tarde! SELECT lote, seq, tipo, secao, SUM(estoqatual) FROM teste WHERE tipo = "51200" GROUP BY tipo; Assim, acho que resolve sua consulta. simulei aqui uma tabela Lote Seq Tipo Secao EstoqAtual ID 001 001 51200 redondo 100 1 001 002 51200 redondo 200 2 001 003 51200 redondo 150 3 Aplicando a query acima o resultado é Lote Seq Tipo Secao EstoqAtual 001 001 51200 redondo 450 Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
emotta Posted July 6, 2022 Report Share Posted July 6, 2022 Oliveiros eu não testei mas acho que é necessário colocar as outras colunas no group. Edu, se der erro a solução passada acima tente a seguinte: SELECT lote, seq, tipo, secao, SUM(estoqatual) as total FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao e se quiser ordenar trabalhe com order by SELECT lote, seq, tipo, secao, SUM(estoqatual) as total FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao ORDER BY LOTE, SEQ, TIPO, SECAO Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted July 6, 2022 Report Share Posted July 6, 2022 Boa tarde, Se quiser agrupar por "LOTE", então o "group by Lote" select lote,tipo,secao,bitola,acab,sum(estqatual) as estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k FROM dpropro0 where tipo = '52100' and COALESCE(dpropro0.SR_DELETED,' ') <> 'T' GROUP BY lote ORDER BY tipo asc, secao asc, bitola asc; Quote Link to comment Share on other sites More sharing options...
edutraini Posted July 6, 2022 Author Report Share Posted July 6, 2022 Boa tarde Pessoal Obrigado pela ajuda para usar o group vc precisa colocar todos os campos que estao na select senao ele nao funciona Eu descobri se algum campo que esta na select tiver diferente dentro do grupo ele quebra exemplo campo observacao esta diferente ai ele nao consegue juntar SELECT lote,, tipo, secao, SUM(estoqatual) as total, observacao FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao, observacao ORDER BY LOTE, SEQ, TIPO, SECAO Lote | seq | tipo de aco | secao | estqatual | observacao 001-001-01-01 | 001 | 52100 | redondo | 100.00 | AMARELO 001-001-01-01 | 002 | 52100 | redondo | 200.00 | VERDE 001-001-01-01 | 003 | 52100 | redondo | 150,00 | AZUL se eu tirar o campo observacao da select ai funciona nao sei se tem algum parametro dentro group que consiga colocar as chaves exemplo somente lote,tipo,secao Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Oi Edu, bom dia! O comando GROUP BY agrupa pela ordem que você definir. Primeiro veja que você colocou no comando WHERE que só o tipo "52100" interessa. Assim os três registros do seu exemplo são filtrados, logo em seguida pelo comando GROUP BY você diz que registros filtrados devem ser agrupados por lote, Seq, Tipo, Secao. Veja os lotes são iguais, porém os conteúdos dos campos seq são diferentes, se você parar no GROUP BY lote, seq ele vai te dar 3 resultados diferentes, apesar de tipo e secao serem iguais. Se você agrupar por lote, tipo, secao, terá 1 resultado. Faça o seguinte teste: SELECT lote, tipo, secao, SUM(estoqatual) as total, observacao FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao o seu resultado será uma só linha, porém se você colocar a seq são três. O agrupamento é por "igualdade de conteúdos". Att., Oliveiros Junior Se quiser mandar a query que está fazendo e o resultado esperado, podemos ajudar. Quote Link to comment Share on other sites More sharing options...
edutraini Posted July 7, 2022 Author Report Share Posted July 7, 2022 Bom dia Junior EU entendi oque vc me passou mas ai minha duvida é que se eu nao colocar o campo observacao no group by ele da essa mensagem no manager studio Mensagem 8120, Nível 16, Estado 1, Linha 1 A coluna 'dpropro0.OBSERVACAO ' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Oi Edu, Esse campo observacao é memo? Você consegue passa a estrutura dessa tabela? Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
emotta Posted July 7, 2022 Report Share Posted July 7, 2022 exatamente Edu, foi por isso que eu coloquei o select com o group by com todos as colunas do select 3 horas atrás, edutraini disse: Bom dia Junior EU entendi oque vc me passou mas ai minha duvida é que se eu nao colocar o campo observacao no group by ele da essa mensagem no manager studio Mensagem 8120, Nível 16, Estado 1, Linha 1 A coluna 'dpropro0.OBSERVACAO ' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY. Quote Link to comment Share on other sites More sharing options...
edutraini Posted July 7, 2022 Author Report Share Posted July 7, 2022 boa tarde Junior nao e campo memo e caracter e tambem se fosse campo memo GROUP BY nao aceita esse tipo campo Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Oi, Dá uma olhada na imagem. Primeira a estrutura do arquivo, segunda uma massa de teste, terceira a query e a quarta o resultado. Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Só uma observação, como o conteúdo da obervação é diferente, como na seq, ele mostra a primeira ocorrência. Se o seq estiver na lista de campos a ser apresentado, ele apresentaria a seq 001. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Oi, Alterei o campo observação para mediumblob e fiz um teste colocando o campo no GROUP BY, e como lhe falei o resultado foram 3 registros, porque o conteúdo do campo observação são diferentes. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 7, 2022 Report Share Posted July 7, 2022 Oliveiros, em qual banco você está testando isso? Em SQL SERVER da erro um select como esse. Todas as colunas do select precisam estar no group senão da erro. No caso do seu exemplo se eu rodar em sql server eu tenho duas opções: ou retiro a observação do select ou coloca ela no group by junto as demais. 8 minutos atrás, oliveiros disse: Só uma observação, como o conteúdo da obervação é diferente, como na seq, ele mostra a primeira ocorrência. Se o seq estiver na lista de campos a ser apresentado, ele apresentaria a seq 001. Quote Link to comment Share on other sites More sharing options...
oliveiros Posted July 7, 2022 Report Share Posted July 7, 2022 Oi emotta, boa tarde! Eu tenho um servidor linux na LocaWeb com mysql 8.0. Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
edutraini Posted July 7, 2022 Author Report Share Posted July 7, 2022 Entao esta ai o problema Sqlexpress o resultado e diferente do mysql Quote Link to comment Share on other sites More sharing options...
joao Posted July 7, 2022 Report Share Posted July 7, 2022 Em 06/07/2022 at 17:18, edutraini disse: Boa tarde Pessoal Obrigado pela ajuda para usar o group vc precisa colocar todos os campos que estao na select senao ele nao funciona Eu descobri se algum campo que esta na select tiver diferente dentro do grupo ele quebra exemplo campo observacao esta diferente ai ele nao consegue juntar SELECT lote,, tipo, secao, SUM(estoqatual) as total, observacao FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao, observacao ORDER BY LOTE, SEQ, TIPO, SECAO Lote | seq | tipo de aco | secao | estqatual | observacao 001-001-01-01 | 001 | 52100 | redondo | 100.00 | AMARELO 001-001-01-01 | 002 | 52100 | redondo | 200.00 | VERDE 001-001-01-01 | 003 | 52100 | redondo | 150,00 | AZUL se eu tirar o campo observacao da select ai funciona nao sei se tem algum parametro dentro group que consiga colocar as chaves exemplo somente lote,tipo,secao Boa noite, Não entendo sua dúvida , como quer agrupar se tem colunas com valor diferente, só vai agrupar mesmo se todas colunas forem iguais, se vc tem várias observações qual vc deseja que mostre, acho lógico , se vc quiser mostrar todas observações, faz um sub-select e criar um array das observações numa coluna, se quiser mostrar só uma observação faz um limit 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 8, 2022 Report Share Posted July 8, 2022 então é isso, mysql tem um comportamento diferente do sql server neste sentido. Se vc executar essa query com os mesmos dados em sql server vai dar erro. Em 07/07/2022 at 15:31, oliveiros disse: Oi emotta, boa tarde! Eu tenho um servidor linux na LocaWeb com mysql 8.0. Att., Oliveiros Junior Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.