Usuário com melhor resposta
Somar Coluna ( Km Pneus)

Pergunta
-
Ola!!
Amigos!
Preciso de uma ajuda para atualizar uma tabela com a soma dos km conforme abaixo:
ULTKMT ATUKMT KMTROD KMTACU ID_HPN CODPNE 0 0 77931 77931 13600 9253 0 0 54332 132263 13601 9253 0 0 1 132264 13602 9253 84732 84732 0 132264 13608 9253 84732 135061 50329 182593 21138 9253 Na tabela acima os campos representam a movimentação historica de cada pneu, no casao acima estou demonstrando apenas um, mas tenho no BD cerca de 2500 cadastrados.
A coluna KMTACU ( KM Acumulado ) no meu BD esta toda bagunçada e nao esta somando como no exemplo acima.
Neste caso cada ID_HPN represente uma movimentação do pneu (codpne) onde deveria acumular o KMTACU de acordo com o KMTROD ( KM rodado)
Tentei explicar da maneira mais sucinta possivel, caso os amigos precisem mais algum exclarecimento edito a pergunta..
Aguarado uma ajuda, obrigado e fiquem com DEUS...
Respostas
-
Adrhohmann,
Segue script, ve se te ajuda... a tabela @Teste seria a tabela que está no seu banco, e eu crio uma #Tmp para auxiliar no UPDATE.
OBS.: Lembrando que ai no SELECT que está no UPDATE vc ainda deverá relacionar no WHERE a chave que identifica o pneu, senão irá somar a km independente do pneu.
DECLARE @Teste TABLE (ULTKMT INT, ATUKMT INT, KMTROD INT, KMTACU INT, ID_HPN INT, CODPNE INT) INSERT INTO @Teste VALUES (0, 0 ,77931 , 0,13600 ,9253), (0 ,0 ,54332 , 0,13601 ,9253), (0 ,0 ,1 ,0 ,13602 ,9253), (84732 ,84732 ,0 ,0 ,13608 ,9253), (84732 ,135061 ,50329 ,0 ,21138 ,9253) SELECT * INTO #Tmp FROM @Teste UPDATE @Teste SET KMTACU = ISNULL((SELECT SUM(A.KMTROD) FROM #Tmp A WHERE A.ID_HPN < B.ID_HPN),0) + B.KMTROD FROM @Teste B SELECT * FROM @Teste ORDER BY ID_HPN DROP TABLE #Tmp
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Editado Fb_Dev terça-feira, 26 de fevereiro de 2013 14:32
- Sugerido como Resposta Gabriel do E. Santo terça-feira, 26 de fevereiro de 2013 15:58
- Marcado como Resposta Adrhohmann quarta-feira, 27 de fevereiro de 2013 13:44
-
Você tem que colocar na seguinte linha, da seguinte forma:
UPDATE @Teste SET KMTACU = ISNULL((SELECT SUM(A.KMTROD) FROM #Tmp A WHERE A.ID_HPN < B.ID_HPN AND A.CODPNE = B.CODPNE),0) + B.KMTROD FROM @Teste B
Pelos campos que vc postou creio que esse CODPNE que seja o ID do PNEU, se não for troque pelo nome do campo que identifica seu pneu, pra pegar apenas os KMs relacionados ao pneu correto.
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Marcado como Resposta Adrhohmann quarta-feira, 27 de fevereiro de 2013 13:44
Todas as Respostas
-
Hohmann
Deixa eu ver se consegui entender, o cálculo da coluna KMTACU é a soma do registro anterior dessa mesma coluna com o registro posterior da coluna KMTROD, ou seja:
77931 + 54332 = 132263
132263 + 1 = 132264
...
Se não for isso, passa a regra de cálculo para que possamos montar um algoritmo.
Abraços
-
Exatamente isso Gabriel!!
Nesse exelmplo que postei acima de um dos meus pneus a soma esta certinha conforme cada movimentação ( ID_HPN), porem no meu BD foi rodado um script e acabou bagunçando toda essa soma.
Vou postar uma imagem da tela pra vc poder entender melhor...
-
Adrhohman e Gabriel...
Me parece que é a aplicação que faz esse cálculo e não o banco.
Gabriel, se for a aplicação, verifique os índices dessa tabela.
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Editado Roberson Naves terça-feira, 26 de fevereiro de 2013 14:21
-
Adrhohmann,
Segue script, ve se te ajuda... a tabela @Teste seria a tabela que está no seu banco, e eu crio uma #Tmp para auxiliar no UPDATE.
OBS.: Lembrando que ai no SELECT que está no UPDATE vc ainda deverá relacionar no WHERE a chave que identifica o pneu, senão irá somar a km independente do pneu.
DECLARE @Teste TABLE (ULTKMT INT, ATUKMT INT, KMTROD INT, KMTACU INT, ID_HPN INT, CODPNE INT) INSERT INTO @Teste VALUES (0, 0 ,77931 , 0,13600 ,9253), (0 ,0 ,54332 , 0,13601 ,9253), (0 ,0 ,1 ,0 ,13602 ,9253), (84732 ,84732 ,0 ,0 ,13608 ,9253), (84732 ,135061 ,50329 ,0 ,21138 ,9253) SELECT * INTO #Tmp FROM @Teste UPDATE @Teste SET KMTACU = ISNULL((SELECT SUM(A.KMTROD) FROM #Tmp A WHERE A.ID_HPN < B.ID_HPN),0) + B.KMTROD FROM @Teste B SELECT * FROM @Teste ORDER BY ID_HPN DROP TABLE #Tmp
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Editado Fb_Dev terça-feira, 26 de fevereiro de 2013 14:32
- Sugerido como Resposta Gabriel do E. Santo terça-feira, 26 de fevereiro de 2013 15:58
- Marcado como Resposta Adrhohmann quarta-feira, 27 de fevereiro de 2013 13:44
-
-
Você tem que colocar na seguinte linha, da seguinte forma:
UPDATE @Teste SET KMTACU = ISNULL((SELECT SUM(A.KMTROD) FROM #Tmp A WHERE A.ID_HPN < B.ID_HPN AND A.CODPNE = B.CODPNE),0) + B.KMTROD FROM @Teste B
Pelos campos que vc postou creio que esse CODPNE que seja o ID do PNEU, se não for troque pelo nome do campo que identifica seu pneu, pra pegar apenas os KMs relacionados ao pneu correto.
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Marcado como Resposta Adrhohmann quarta-feira, 27 de fevereiro de 2013 13:44
-