Foros del Web » Programando para Internet » ASP Clásico »

Sumando total de registros agrupados

Estas en el tema de Sumando total de registros agrupados en el foro de ASP Clásico en Foros del Web. Hola Expertos, tengo una consulta en SQL a una BD Acces: SQL = "SELECT UnivCol.Univ, Count(Registro.Usuario) AS CuentaDeUsuario FROM UnivCol INNER JOIN Registro ON UnivCol.IdUniv ...
  #1 (permalink)  
Antiguo 28/06/2003, 12:17
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Sumando total de registros agrupados

Hola Expertos, tengo una consulta en SQL a una BD Acces:

SQL = "SELECT UnivCol.Univ, Count(Registro.Usuario) AS CuentaDeUsuario FROM UnivCol INNER JOIN Registro ON UnivCol.IdUniv = Registro.Univ GROUP BY UnivCol.Univ"

la tabla en acces contiene un listado de personas(658) con la Universidad donde estudia cada una. Al ejecutarla en asp me trae agrupados los registros por el nombre de la universidad. Hasta ahi todo muy bien, pero quiero tener el porcentaje que representa cada grupo (o sea cada universidad) con respecto al total (los 687).

Como puedo obtener el numero total de registros (al usar rs.RecordCount obtengo el numero de grupos que obtengo con la consulta y no el total)

Alguna idea?

El codigo que tengo es este:

<%
strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database/paginar.mdb") & ";Persist Security Info=False"
set cnn = CreateObject("ADODB.Connection")
cnn.Open strconn

set rs = CreateObject("ADODB.Recordset")

Dim mi_Pais, mi_depto
mi_Pais=request.querystring("mi_Pais")

SQL = "SELECT UnivCol.Univ, Count(Registro.Usuario) AS CuentaDeUsuario FROM UnivCol INNER JOIN Registro ON UnivCol.IdUniv = Registro.Univ GROUP BY UnivCol.Univ"

if Request.Querystring("ref") = "" then
p = 0
else
p = Cint(Request.Querystring("ref"))
end if

rs.Open SQL, cnn, 3, 1
total_registros = rs.RecordCount

banerror = 0
If total_registros > 0 then

rs.Move p
inicio = rs.Bookmark
mitabla = rs.GetRows(40,inicio)
else

banerror = 1
end if

rs.Close
set rs = Nothing
cnn.Close
set cnn = Nothing

Id = 17
Univ = 0
CuentaDeUsuario = 1


%>

<%If banerror = 1 then%>


<center><table width=93% border=0 align=center bordercolor="#3333CC">
<tr>
<td align=center colspan=4>
<font color=black size=2><b>No se encontró ningun registro</b></font>
</td>
</tr>
</table></center>
<%else%>

<center><font face="verdana" size="2"><%=total_registros%> personas <%=mi_cuenta%>registrados a la fecha en el Departamento de <%=mi_depto%></font>
</center><br>
<center><table bgcolor="#6633CC" width=50% border=0 cellspacing="0" cellpadding="0" align=center>

<%For i = 0 to Ubound(mitabla,2)%>
<tr>
<td vAlign=top align=left bgColor=#FFFFFF><font face="verdana" size="1">&nbsp; <%=mitabla(Univ,i)%>
</td>

<td align="left" valign=middle bgColor=#FFFFFF><img src="imagenes/registro/encuestabar3-l.gif" width="7" height="13" border="0"><img src="imagenes/registro/encuestabar3.gif" width="<%=mitabla(CuentaDeUsuario,i)%>" height="13" border="0"><img src="imagenes/registro/encuestabar3-r.gif" width="8" height="13" border="0">&nbsp;&nbsp;<font face="verdana" size="1"> (<%=mitabla(CuentaDeUsuario,i)%>)</font>

</td>
</tr>
<%Next%>

continua codigo....

Última edición por Eutheola; 28/06/2003 a las 12:22
  #2 (permalink)  
Antiguo 28/06/2003, 16:02
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
¿Por qué no cambias los parámetros de tu consulta? Puedes crear otra consulta SQL en la que no se defina ningún parámetro de búsqueda, es decir, que seleccione todos los registros que contenga la tabla. Así puedes usar RecordCount de manera que almacenes en una variable el total de registros.

SET RS_total = CreateObject("ADODB.Recordset")
SQL_total = "SELECT * FROM UnivCol"

total = RS_total.RecordCount

Ahora ya puedes usar total para ir calculando los porcentajes.

Espero que fuera eso lo que querías.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 28/06/2003, 17:03
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Gracias, pero no se como puedo hacer esto de las dos consultas, entiendo y lo veo posible, de hacer una consulta almacenar el total y luego la consulta del grupo pero no ha sido posible. Si me das una mano con el codigo para esto!
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #4 (permalink)  
Antiguo 28/06/2003, 17:43
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Lo he reestructurado un poco para que quede algo más claro. Sería más o menos así:

<%
'Creamos la conexión a la base de datos
set cnn = CreateObject("ADODB.Connection")
cnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database/paginar.mdb") & ";Persist Security Info=False"

'Creamos las dos consultas
SQL = "SELECT UnivCol.Univ, Count(Registro.Usuario) AS CuentaDeUsuario FROM UnivCol INNER JOIN Registro ON UnivCol.IdUniv = Registro.Univ GROUP BY UnivCol.Univ"
SQL_total = "SELECT * FROM UnivCol"

'Creamos los dos recordset para cada coonsulta
set rs = CreateObject("ADODB.Recordset")
set rs_total = CreateObject("ADODB.Recordset")

rs.Open SQL, cnn, 3, 1
rs_total.Open SQL_total, cnn, 3, 1

'Guardamos en la variable total el número de registros
total=rs_total.RecordCount
......
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 28/06/2003, 17:49
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Listo ! lo probare y te cuento

De todos modos gracias!
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #6 (permalink)  
Antiguo 30/06/2003, 08:42
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
De acuerdo

Gracias Bravenap funciona OK, pero un pregunta mas, cuantas consultas puedo hacer por pagina?, existe alguna limitación.?
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #7 (permalink)  
Antiguo 30/06/2003, 08:50
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Me alegro de que te haya funcionado.

Sobre lo de que cuántas consultas se pueden hacer Pues creo que no hay ninguna limitación. De todas formas tampoco es muy conveniente hacer muchas, sobre todo de tablas con tantos registros. Depende también del servidor: si tiene poca memoria o demasiados visitantes puede que se sature o que trabaje demasiado lento.

De todas formas, nosotros habíamos creado las dos consultas juntas por lo que se mantienen en la memoria del servidor dos objetos y éstos no se cierran hasta que se envía la página o los cierra el código.

De modo que puede que te venga mejor abrir un consulta, obtener los resultados y cerrarla. Luego hacer lo mismo con la siguiente consulta, y la otra, y la otra, ....

Aún así puede que no notes ninguna diferencia en cuanto a la velocidad de envío de la página.

Esperemos por tanto a un experto en estos temas para que nos resuelva con seguridad la duda.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #8 (permalink)  
Antiguo 30/06/2003, 09:10
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
En vez de hacer un rs.Recordcount haz un
rs.open "SELECT COUNT(*) FROM TABLA"
lngCuantos = rs.fields(0)

El rendimiento es mucho mejor, porque el servidor de bd te devuelve un solo registro y va muchisimo mas rapido.

Un saludo.
  #9 (permalink)  
Antiguo 30/06/2003, 10:01
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Pues sí AlexNV, mucho mejor y más rápido.

Gracias de mi parte.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:39.