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

contar registros iguales

Estas en el tema de contar registros iguales en el foro de ASP Clásico en Foros del Web. Tengo una tabla con registros q se repiten, como podria contar los registros repetidos. ej. Id idcurso nom 1 1 edgar 2 1 edgar2 3 ...
  #1 (permalink)  
Antiguo 19/04/2004, 05:44
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 21 años, 2 meses
Puntos: 0
Exclamación contar registros iguales

Tengo una tabla con registros q se repiten, como podria contar los registros repetidos. ej.

Id idcurso nom
1 1 edgar
2 1 edgar2
3 1 edgar3
4 2 edgar4



Hay en el "idcurso=1" 3 registros
hay en el "idcurso=2" 1 registro


soys los mejores
__________________
Calle17.net

edgargranados.es
  #2 (permalink)  
Antiguo 19/04/2004, 08:06
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Pero esos id's repetidos son datos diferentes o iguales, porque si son iguales, pos tu problema es de normalización más bien...bueno más o menos se me ocurre que hagas esto:

1.- Obtén el máximo valor de idcurso con esta función que recibe la tabla y el campo:

Function ObtenerMaximo(tabla, campo)
MyMax = 0
Set rsObtenerMaximo = Server.CreateObject("ADODB.Recordset")
strSQLObtenerMaximo = "SELECT MAX(" & campo & ") AS MiMax FROM " & tabla
rsObtenerMaximo.Open strSQLObtenerMaximo, ObjConn, 3, 3
If not rsObtenerMaximo.EOF Then
MyMax = rsObtenerMaximo("MiMax")
End If
rsObtenerMaximo.Close
Set rsObtenerMaximo = Nothing
ObtenerMaximo = MyMax
End Function

itera = ObtenerMaximo("esta_tabla", "idcurso")

2.- Por medio de esta otra función, obtén el número de id repetidos para cada número en la variable itera...
Haz un ciclo que guarde cada uno de estos resultados en un arreglo, recorre al arreglo e imprime

Function DevuelveRegistro(tabla, campo, condicion, numerico)
Set rsDevuelveRegistro = Server.CreateObject("ADODB.Recordset")
If numerico Then
strSQLDevuelveRegistro = "SELECT " & campo & " FROM " & tabla & " WHERE " & campo & "=" & condicion
Else
strSQLDevuelveRegistro = "SELECT " & campo & " FROM " & tabla & " WHERE " & campo & "='" & condicion & "'"
End If
rsDevuelveRegistro.Open strSQLDevuelveRegistro, ObjConn, 3, 3
If not rsDevuelveRegistro.EOF Then
cuenta = rsDevuelveRegistro.RecordCount
Else
cuenta = 0
End If
rsDevuelveRegistro.Close
Set rsDevuelveRegistro = Nothing
DevuelveRegistro = cuenta
End Function

Dim arrRegistros()

For i = 1 to cuenta
este_registro = DevuelveRegistro("una_tabla", "idcurso", i, true)
If i = 1 Then
Redim arrRegistros(i)
arrRegistros(i) = este_registro
Else
Redim Preserve arrRegistros(i)
arrRegistros(i) = este_registro
End If
Next

For i = 0 to uBound(arrRegistros)
Response.Write("Hay en el idcurso=" i + 1 & arrRegistros(i) & " registros<br>")
Next

Ok ahora este modelo tiene un problema que sería el número de iteraciones que daría en el supuesto que encuentre un max de 100 y solo haya valores de 1 y 100 por ejemplo, pero ve si te sirve, es lo que se me ocurre de momento.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 19/04/2004, 09:53
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Y no sería más práctico algo como...


<%
...
SQL = "SELECT Count(nom) AS Nombre FROM tabla Group By idcurso"
...
Do while not RS.EOF
Response.Write "Hay en el idcurso=1 " & RS(NOmbre) & " registros" & "<br>"
RS.MoveNext
Loop
%>


?
__________________
...___...
  #4 (permalink)  
Antiguo 19/04/2004, 11:11
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 4 meses
Puntos: 98
Cita:
Y no sería más práctico algo como...
NO!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 20/04/2004, 04:08
 
Fecha de Ingreso: enero-2004
Mensajes: 154
Antigüedad: 20 años, 3 meses
Puntos: 0
El camino más sencillo si obtienes los mismos resultados siempre es el Mejor.

Saludos!!!
  #6 (permalink)  
Antiguo 21/04/2004, 05:00
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 21 años, 2 meses
Puntos: 0
dazuaga.. he hexo lo q tu me has dixo y me ha funcionado bien... pero no del todo

yo queria q me mostrara esto:

Ejemplo:

Curso 1 - 5 registros
Curso 2 - 2 registros
Curso 3 - 8 registors
__________________
Calle17.net

edgargranados.es
  #7 (permalink)  
Antiguo 21/04/2004, 11:17
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Claro, porque el número de curso lo dejé fijo... qué gil

Intentá así:



<%
...
SQL = "SELECT idcurso, Count(nom) AS Cantidad FROM tabla Group By idcurso order by idcurso"
...
Do while not RS.EOF
Response.Write "Curso " & RS("idcurso") & " - " & RS("Cantidad") & " registros" & "<br>"
RS.MoveNext
Loop
%>
  #8 (permalink)  
Antiguo 09/06/2004, 16:33
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 21 años, 2 meses
Puntos: 0
oks, me funciono perfectamente y ahora lo estoy usando para un contador de mi web. Aqui muestro una parte de las estadisticas de las visitas. Me gustaria q se ordenara por el "cantidade" pero si pongo order by cantidade me da error. como puedo hacerlo?

Muestro el codigo por si lo quereis ver mejor:

<%

Dim oConne, rse, SQLe
Dim PaginaActuale ' en qué pagina estamos
Dim PaginasTotalese ' cuántas páginas tenemos
Dim TamPaginae ' cuantos registros por pagina
Dim CuantosRegistrose ' la cuenta que os he mencionado

'MODIFICAR AQUI PARA CAMBIAR EL Nº DE REGISTRO POR PAGINA
TamPaginae=10

'Leemos qué página mostrar. La primera vez será la inicial
if Request.Querystring("paginae")="" then
PaginaActuale=1
else
PaginaActuale=CInt(Request.Querystring("paginae"))
end if

set oConne=Server.CreateObject("ADODB.Connection")
set rse=Server.CreateObject("ADODB.Recordset")

' Conexión por OLEDB
oConne.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source="&Server.MapPath("estadisticas.mdb")&";"
SQLe="SELECT url, Count(hora) AS Cantidade FROM estadisticas Group By url order by url"

' Defino el tamaño de las páginas
rse.PageSize=TamPaginae
rse.CacheSize=TamPaginae

' Abro el recordset
rse.Open SQLe, oConne, 1, 2

'Cuento las páginas
PaginasTotalese=rse.PageCount

'Compruebo que la pagina actual está en el rango
if PaginaActuale < 1 then
PaginaActuale = 1
end if
if PaginaActuale > PaginasTotalese then
PaginaActuale = PaginasTotalese
end if

'Por si la consulta no devuelve registros!
if PaginasTotalese=0 then

Response.Write("No se encontraron resultados.")

else

'Vamos a paginar
rse.AbsolutePage=PaginaActuale
Response.Write("<font size=2 face=arial>Página " & PaginaActuale & " de " & PaginasTotalese)
Response.Write("<br><br><table width=200><tr bgcolor=""eeeeee""><td><font size=2 face=arial><b><center>DIA</td>")
Response.Write("<td><font size=2 face=arial><b><center>VISITAS</td><td><font size=2 face=arial><b><center>BARRAS<td></tr>")

CuantosRegistrose=0
do while not rse.EOF and CuantosRegistrose < TamPaginae
'Pinto una línea de la tabla por cada registro
Response.Write("<tr>"&VbCrLf)
Response.Write("<td><font size=2 face=arial> <font size=1 face=arial><a href="&rse.Fields("url")&" target=_blank>"& left(RSe.Fields("url"),20)&"...</a><br>")
Response.Write("</td><td><font size=2 face=arial> "&rse.Fields("cantidade")&"<br>")
Response.Write("</td><td><img src=barraestats.gif height=15 width="&rse.Fields("cantidade")&"></td> ")
CuantosRegistrose=CuantosRegistrose+1
rse.MoveNext
loop
Response.Write("</tr></table>")

end if
rse.Close
oConne.Close
set rse=nothing
set oConne=nothing

'Muestro los enlaces
Response.Write("<br><br>")
if PaginaActuale > 1 then
Response.Write("<A HREF=?paginae="& PaginaActuale-1& _
">siguientes</A> ")
end if
if PaginaActuale < PaginasTotalese then
Response.Write("<A HREF=?paginae=" & PaginaActuale+1 & _
">anteriores</A>")
end if


%>
__________________
Calle17.net

edgargranados.es
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 06:25.