Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, estou precisando somar linhas, (a soma por coluna é tranquilo) ex.
1 + 1 + 2 + 2 = 6
2 + 2 + 2 + 2 = 8
1 + 1 + 1 + 1 = 4
Bom meu código está assim
While Not Rsi.EOF
Response.Write totalpedidos*Rsi("medida")
Rsi.MoveNext
Preciso da lógica de soma dessa linha Response.Write totalpedidos*Rsi("medida")
Gustavo, bom dia valeu pela dica, mas ainda não compreendi, vc tem alguma código com essa descrição, para que eu possa visualizar melhor?
Código pronto não tenho não ... mas quando eu chegar no escritório faço pra pra VC volte aqui no forum umas 10h a 10:30h ...
Valeu Gustavo, só precisava mesmo de uma referencia, mas beleza volto as 10:00
você pode usar a função SUM do SQL e fazer direto na string SQL, A função SUM () retorna a soma total de uma coluna numérica.
SELECT SUM(nome_coluna) as total FROM table_name
fica mais fácil ainda
xanburzum, bom dia.
A ideia foi boa mas em parte do código reduziu um pouco a linhas, mas vou postar o codigo que estou usando para que entenda o que acontece,
<%Set RSsi = Server.CreateObject("ADODB.Recordset")
RSsi.CursorType = 0
RSsi.CursorLocation = 3
RSsi.LockType = 3
SQLStmt = "SELECT cod_aplica, aplicacao FROM planta_comodo_aplicacao where cod_pc = '"&Rmap("cod_pc")&"' and cod_produto like '%"&Rp("cod_produto")&"%'"
RSsi.Open SQLstmt,Conn
if RSsi.recordcount = 0 then
response.write "No info available!"
else
For b=1 to RSsi.recordcount %>
<%'Pega total de pedidos com contrato fechado%>
<%Set Rp1 = Server.CreateObject("ADODB.Recordset")
Rp1.CursorType = 0
Rp1.CursorLocation = 3
Rp1.LockType = 3
SQLStmt2 = "SELECT * FROM pedidos WHERE user_id in ("&cod_plantanext&") and cod_aplica = '"&RSsi("cod_aplica")&"' and cod_produto = '"&Rp("cod_produto")&"'"
Rp1.Open SQLstmt2,DSNtest %>
<%totalpedidos = Rp1.recordcount%>
<%Rp1.close %>
<%'Multiplica total de produtos pela medida%>
<%Set Rsi = Server.CreateObject("ADODB.Recordset")
SQLStmt = "SELECT SUM("&totalpedidos&"*medida) as total FROM planta_comodo_produto where cod_pc_aplica = '"&RSsi("cod_aplica")&"' and cod_produto = '"&Rp("cod_produto")&";'"
Rsi.Open SQLstmt,Conn
If Rsi.Eof Then
Response.Write "<font color=""#FF0000"">Não tem</font>"
else
While Not Rsi.EOF %>
<%totpeds = Rsi("total")%>
<%Rsi.MoveNext
Wend
Rsi.close %>
<%End If%>
<%RSsi.MoveNext%>
<%next%>
<%totalpeds = totalpeds + totpeds
Response.Write totalpeds%>
<%end if%>
<%RSsi.close %>9 + 1 + 1 = 11
2 + 2 + 2 = 6
Mas ele imprime assim
9 + 1 + 1 = 11
2 + 2 + 2 = "17" (ou seja a partir da segunda linha ele soma a linha anterior nesse ex é 11 + 6 = 17 quando nessa linha deveria ser somente 6)
Acho que deu para entender meu problema...
Ricardo vendo seu post acima vejo que seu problema é das somas das colunas? ou das linhas?
Das linhas, preciso das somas das linhas individuais, e o que consegui até agora foi somar a coluna inteira
para somar as colunas é somente agrupar somando as mesmas ...
vc pode somar na sql ou no loop do código...
na sql é fazendo uma expressão flutuante ... (campo calculado)
sql = "select campo1,campo2,campo3, (campo1+campo2+campo3) as somadeCampos from tabela where campox = ???"
ao executar esse sql terá os campos campo1,campo2,campo3,somadeCampos
o campo somadeCampos já será os campos somados!!
com o loop no código não muda muito vou pegar a soma feita na sql e fazer no recordset
while not rs.eof
somadeCampos = cdbl(rs("campo1")) + cdbl(rs("campo2")) + cdbl(rs("campo3"))
response.write somadeCampos & "<br>"
rs.movenext
wend
qualquer dúvida é só postar...
Cara acho que não consegui explicar direito, pois os cálculos é de um único campo que se multiplica ao identificar os registros.
A parte do código que preciso dessa soma é essa abaixo.
<%totpeds = Rsi("total")%>
<%Rsi.MoveNext
Wend
Rsi.close %>
<%End If%>
<%RSsi.MoveNext%>
<%next%>
<%totalpeds = totalpeds + totpeds
Response.Write totalpeds%>
E a impressão é na última linha do código, mas soma a coluna inteira sendo que preciso que a soma seja nas linhas individuais.
vamos ver se eu entendi vc não quer agrupar pois precisa mostrar as linhas individuais mas ao final mesmo assim quer mostrar suas respectivas somatórias é isso!?
Isso, preciso mostrar a soma de cada linha e não da coluna inteira ex.
coluna1 | Coluna2
1 + 1 | 2
2 + 2 | 4
3 + 2 | 5
E assim por diante conforme, não precisa somar a coluna
atribua variáveis separadas para cada linha, crie uma session um uma variável temporária e pegue os valores daí é uma adição simples. Você pode até jogar em um txt também
Ok, mas vc tem algum exemplo para me me mostrar em baseado no código que postei.
Uma alternativa que fiz foi a seguinte
If Rsi.Eof Then
Response.Write "<font color=""#FF0000"">Não tem</font>"
else
While Not Rsi.EOF %>
<%If b = 1 Then
total1 = Rsi("total")%>
<%End If%>
<%If b = 2 Then
total2 = Rsi("total")%>
<%End If%>
<%If b = 3 Then
total3 = Rsi("total")%>
<%End If%>
<%If b = 4 Then
total4 = Rsi("total")%>
<%End If%>
<%Rsi.MoveNext
Wend
Rsi.close %>
<%End If%>
e na hora de imprimir os dados fiz assim
<%
If aplicacaototal = 1 Then
Response.Write total1
elseif aplicacaototal = 2 Then
Response.Write Total1&"<br>"
Response.Write Total2&"<br><hr><hr>"
Response.Write total1 + total2
elseif aplicacaototal = 3 Then
Response.Write Total1&"<br>"
Response.Write Total2&"<br>"
Response.Write Total3&"<br><hr><hr>"
Response.Write total1 + total2 + total3
elseif aplicacaototal = 4 Then
Response.Write Total1&"<br>"
Response.Write Total2&"<br>"
Response.Write Total3&"<br>"
Response.Write Total4&"<br><hr><hr>"
Response.Write total1 + total2 + total3 + total4
elseif aplicacaototal = 5 Then
Response.Write Total1&"<br>"
Response.Write Total2&"<br>"
Response.Write Total3&"<br>"
Response.Write Total4&"<br>"
Response.Write Total5&"<br><hr><hr>"
Response.Write total1 + total2 + total3 + total4 + total5
end if
%>Uma solução mais agradável seria utilizar uma classe de GridView
ridardo vendo seu post 13 você tem uma expressão em um campo? campo1 = "1+1"
É isso mesmo? Qual banco de dados está usando? Pra ficar mais fácil tem ajeitar isso na SQL... mas tem saber qual o banco...
Você pode usar jquery para isso também apenas alimentando os dados e depois o próprio js calcula pra vc.
ricardo, relendo seu post 13 dá para fazer isso no recordset mesmo é mais ou menos assim!!
vamos supor que seu campo1 tenha o valor = "1 + 1"
então
valor1 = Cint(split(rs("Campo1"),"+")(0)) ' aqui eu defini o sinal de + como separador e atribui como numérico só para tirar os espaços
valor2 = Cint(split(rs("Campo1"),"+")(2)) ' a mesma coisa sendo que capturei o próximo índice do split...
ai fica fácil
valorSoma = Cint(valor1) + Cint(valor2)
qualquer dúvida é só postar...
vc pode fazer isso direto no SQL também
post #17
na verdade o post #6 já sugere
o post #6 só está agrupando o que não atende ao problema, o que seria necessário até o momento é quebrar a string do campo para somar ... só que depende do banco para dar uma solução pois tem bancos de dados que não tem aplicação de tipo split como por exemplo o mysql o que derrente pode-se usar o SUBSTRING_INDEX e o postgresql derrepente pode se usar split_part ... mas se não tiver jeito só fazendo um procedimento armazenado para aplicar na consulta... mediante tal problema que optei a quebrar o campo no recordset mesmo...
dá pra usar uma classe de GridView ou jquery e apenas pegar os dados vindo do banco
Pessoal, desculpa insistir mas já tentei de tudo, e ainda não consegui enter, uma vez que meu prazo está totalmente estourado, e estou tomando bronca atrás de bronca, mas vamos lá
Olha pessoal abaixo o código que estou usando, até consigo somar, mas a soma herda a linha acima, ou seja está somando a coluna.
Vou postar abaixo.
<%Set RS3 = Server.CreateObject("ADODB.Recordset")
SQLStmt = "SELECT cod_comodo FROM galeria where codigo = '"&R12("codigo")&"' order by ordem desc"
RS3.Open SQLstmt,DSNtest
While Not RS3.EOF%>
<%Set Rmap = Server.CreateObject("ADODB.Recordset")
Rmap.CursorType = 0
Rmap.CursorLocation = 3
Rmap.LockType = 3
SQLStmt = "SELECT cod_pc FROM planta_comodo where cod_comodo = '"&RS3("cod_comodo")&"'"
Rmap.Open SQLstmt,Conn
If Rmap.Eof Then
Response.Write "Comodo não cadastrado"
else
While Not Rmap.EOF%>
<%Set RSsi = Server.CreateObject("ADODB.Recordset")
RSsi.CursorType = 0
RSsi.CursorLocation = 3
RSsi.LockType = 3
SQLStmt = "SELECT cod_aplica, aplicacao FROM planta_comodo_aplicacao where cod_pc = '"&Rmap("cod_pc")&"' and cod_produto like '%"&Rp("cod_produto")&"%'"
RSsi.Open SQLstmt,Conn
if RSsi.recordcount = 0 then
response.write "No info available!"
else
aplicacaototal = RSsi.recordcount 'Não ocultar pois é responsável pela soma.
For b=1 to RSsi.recordcount %>
<%'Pega total de pedidos com contrato fechado%>
<%Set Rp1 = Server.CreateObject("ADODB.Recordset")
Rp1.CursorType = 0
Rp1.CursorLocation = 3
Rp1.LockType = 3
SQLStmt2 = "SELECT * FROM pedidos WHERE user_id in ("&cod_plantanext&") and cod_aplica = '"&RSsi("cod_aplica")&"' and cod_produto = '"&Rp("cod_produto")&"'"
Rp1.Open SQLstmt2,DSNtest %>
<%totalpedidos = Rp1.recordcount%>
<%Rp1.close %>
<%'Multiplica total de produtos pela medida%>
<%Set Rsi = Server.CreateObject("ADODB.Recordset")
SQLStmt = "SELECT SUM("&totalpedidos&"*medida) as total FROM planta_comodo_produto where cod_pc_aplica = '"&RSsi("cod_aplica")&"' and cod_produto = '"&Rp("cod_produto")&";'"
Rsi.Open SQLstmt,Conn
If Rsi.Eof Then
Response.Write "<font color=""#FF0000"">Não tem</font>"
else
While Not Rsi.EOF %>
<%=b%> - <%= Rsi("total")%> <br>
<%totaltodos2 = totaltodos2 + Rsi("total")%>
<%Rsi.MoveNext
Wend
Rsi.close %>
<%End If%>
<%RSsi.MoveNext%>
<%next%>
<%end if%>
<%RSsi.close %>
<%Rmap.MoveNext
Wend
Rmap.close
End IF
%>
<%=totaltodos2%>
<%RS3.MoveNext
Wend
RS3.close%>Como posso fazer a cada linha reiniciar a contagem e não somar a coluna.
Pessoal o bd é access
Pessoal pode fechar o tópico porque consegui a reposta que era muito simples:
<%=totaltodos2%>
<%totaltodos2 = 0 %>Esse valor reinicia a contagem. Era somente isso que precisava. MAs de qualquer forma valeu.
você terá que criar duas variáveis uma acumuladora e outra para ser totalizadora no final do loop faça as contas... deixa eu me adiantar VC quer de todas as colunas certo!? Vc terá que vetorizar as colunas ... se eu não estivesse no tablet eu faria praVC mas não é difícil não...