Somar iguais, mas incluindo o campo a ser somado

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

Uma ocorrência diferente:

Somar valores iguais, incluindo o campo a ser somado

Código: Selecionar todos

SELECT CODIGO, SUM( QTDE ) AS SOMA FROM TABELA GROUP BY CODIGO, QTDE
Se os grupos no GROUP BY precisam constar na lista de campos do resultado, como somar valores iguais?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

Talvez isto ????

Código: Selecionar todos

SELECT CODIGO, SUM( QTDE ) * QTD AS SOMA
FROM
( 
   SELECT CODIGO, QTDE, COUNT( *) AS QTD
   FROM TABELA 
   GROUP BY CODIGO, QTDE
) AS B
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

Ah sim... e também códigos iguais.

Neste mês a ANP está reclamando porque informamos exatamente igual à nota da Petrobrás, mas.... existe produto repetido na nota.

Então temos:

a) Se tem produto com mesmo código próprio, somar
b) Se tem produto com mesmo código ANP e quantidade igual, somar

exemplo exagerado, mesma nota:

nosso código 10, anp 259, quantidade 10
nosso código 10, anp 259, quantidade 15
nosso código 20, anp 259, quantidade 25
nosso código 30, anp 259, quantidade 10

os dois códigos 10 precisam ser somados, porque é produto repetido
primeiro resultado

nosso código 10, anp 259, quantidade 25
nosso código 20, anp 259, quantidade 25
nosso código 30, anp 259, quantidade 10

pra ANP não interessa nosso código....

anp 259, quantidade 25
anp 259, quantidade 25
anp 259, quantidade 10

Agora não pode ter produto exatamente igual, precisa agrupar QUANTIDADE igual
Esse é o resultado final a ser gerado.

anp 259, quantidade 50
anp 259, quantidade 10

trem chato né?
Agora pensar em como fazer isso em SQL.

Isso é POR NOTA/DOCUMENTO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

JoséQuintas escreveu:exemplo exagerado, mesma nota:
Nem é exemplo exagerado, porque tem cada situação.
Apenas acho que é difícil acontecer na prática tudo de uma vez, mas pode acontecer.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Somar iguais, mas incluindo o campo a ser somado

Mensagem por alxsts »

Olá!
JoséQuintas escreveu:SELECT CODIGO, SUM( QTDE ) AS SOMA FROM TABELA GROUP BY CODIGO, QTDE
No caso acima, a coluna QTDE não precisa estar no GROUP BY pois ela é argumento de uma função de agregação, Sum().
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

alxsts escreveu:No caso acima, a coluna QTDE não precisa estar no GROUP BY pois ela é argumento de uma função de agregação, Sum().
Mas aí é que está o detalhe: não vai somar quantidades diferentes.
quantidades 10, 20, 30, 40 e 10, só vai somar as duas de 10, não pode somar as outras.
Ao mesmo tempo que a soma de quantidade existe, ela também é uma identificação do que totalizar.

Acho que vão ser as duas etapas:
- a primeira obtendo QTD pra identificar QTDE duplicada e acumular no mesmo código próprio
- a segunda com a mesma coisa, pra identificar QTDE duplicada e acumular no mesmo código ANP
Precisa ser em duas etapas porque a primeira pode gerar novos duplicados.

E no final.... sempre vai dar diferença na ANP, porque não é a mesma ordem.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Somar iguais, mas incluindo o campo a ser somado

Mensagem por JoséQuintas »

Por outro lado.....
Como sempre a ANP acusa diferença, porque não existe uma ordem definida quando isso acontece....
Mais prático somar tudo, e apenas enviar email de confirmação depois, como sempre é feito.

Explicando melhor:

A Petrobrás informa:
produto 259 qtde 10
produto 259 qtde 20
produto 259 qtde 30

Nós informamos:
produto 259 qtde 20
produto 259 qtde 30
produto 259 qtde 10

E a ANP responde isso com 9 (NOVE) erros.

Por outro lado, se mandarmos:
produto 259 qtde 60
A ANP vai responder com apenas 3 (TRES) erros.
E basta mostrar que a soma bate, e fica resolvido.

Neste mês veio um relatório com 6 páginas de erros, quase 120 erros, pra uma nota com uns 20 produtos.
Tá complicado conferir isso.
Estou preocupado de deixar passar alguma coisa nessa lista de erros maluca.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder