none
Somar Coluna ( Km Pneus) RRS feed

  • 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...

    terça-feira, 26 de fevereiro de 2013 12:20

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
    terça-feira, 26 de fevereiro de 2013 14:28
  • 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
    quarta-feira, 27 de fevereiro de 2013 11:35

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

    terça-feira, 26 de fevereiro de 2013 13:15
  • 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...

    terça-feira, 26 de fevereiro de 2013 13:26
  • 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.


    terça-feira, 26 de fevereiro de 2013 14:20
  • 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
    terça-feira, 26 de fevereiro de 2013 14:28
  • Fb_Dev

    Nao sei onde estou errando, pois nao consigo implementar a condição da chave dos pneus.....

    toda a vez que rodo o script a soma vai acumulando até o ultimo pneu ficar com milhoes de km's...

    terça-feira, 26 de fevereiro de 2013 22:04
  • 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
    quarta-feira, 27 de fevereiro de 2013 11:35
  • Fb_Dev

    Simplesmente Perfeito...

    Nao estava colocando o A e o B antes do CODPNE....

    Resolveu meu problema....

    Parabens e obrigado pela ajuda

    Fiquem com DEUS...

    quarta-feira, 27 de fevereiro de 2013 13:46