Bueno, como lo escribi rápido, la verdad es que no medite mucho sobre el mismo, pero el ropoblema puede ser que al llegar a EOF (rs.movenext) intentamos hacer referencia a rs("rubro"), lo cual esta mal.
Si movemos el código un poco se soluciona esto:
Código:
set rs=oConn.Execute(SQL)
rubro_ant=rs.fields("rubro")
suma=0
While not rs.eof
if rs("rubro") <> rubro_ant then%>
<br> totales: <%=suma%> <br>
<%
rubro_ant=rs.fields("rubro")
suma=0
end if
Id=id+1
Response.Write(id)
Response.Write(rs.fields("nombre_cliente"))
Response.Write(rs.fields("numero_cliente"))
Response.Write(rs.fields("rubro"))
suma= suma + monto
rs.MoveNext
wend
%> <br> totales: <%=suma%> <br> <%
%>
El útimo desplegado es para el último total (ya que se haya llegado al EOF).