Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Contar registros en relacion muchos a muchos

Estas en el tema de Contar registros en relacion muchos a muchos en el foro de Oracle en Foros del Web. Hola a todos, les planteo mi inquietud de la siguiente manera, poseo 4 tablas relacionadas de uno a muchos seguidas unas de otras asi: Tabla1 ...
  #1 (permalink)  
Antiguo 14/10/2010, 16:07
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 14 años
Puntos: 0
Contar registros en relacion muchos a muchos

Hola a todos, les planteo mi inquietud de la siguiente manera, poseo 4 tablas relacionadas de uno a muchos seguidas unas de otras asi:

Tabla1 CATEGORÍA
Tabla2 SUBCATEGORÍA
Tabla3 TEMA
Tabla4 OBJETO

como les plantee la relación es de muchos a muchos, una CATEGORÍA tienes muchas SUBCATEGORÍA y esta muchos TEMA, y así sucesivamente

si por ejemplo tengo los siguientes registros k me listan tal cual, si yo kisiera poner al lado de cada registro como esta en paréntesis, la cantidad de registros tipo OBJETO que contienen

CATEGORÍA
-c1 (4)
-c2 (3)
-c3 (2)

CATEGORISMO
-s1c1 (4)
-s2c1 (0)
-s3c2 (3)
-s4c3 (2)

TEMA
-t1s1 (3)
-t2s1 (1)
-t3s3 (0)
-t4s3 (3)
-t5s4 (1)
-t6s4 (1)

OBJETO
-o1t1
-o2t1
-o3t1
-o4t2
-o5t4
-o6t4
-o7t4
-o8t5
-o9t6

espero haberme hecho entender y de antemanos muchas gracias

Última edición por rocka8613; 15/10/2010 a las 07:57
  #2 (permalink)  
Antiguo 19/10/2010, 18:21
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Contar registros en relacion muchos a muchos

Hola Amigo, te cuento lo que podemos hacer...

Primero, hacemos un outer join de todas las tablas (las cuatro) y como no mencionas como se llama el campo donde esta el ID, entonces le vamos a poner como nombre de columna ID al campo que tiene el codigo y PARENT_ID al campo que tiene la relacion con la tabla maestro.

OK..

El FROM y WHERE deberian quedar asi...

FROM TABLA1 T1, TABLA2 T2, TABLA3 T3, TABLA4 T4
WHERE T1.ID = T2.PARENT_ID (+)
AND T2.ID = T3.PARENT_ID (+)
AND T3.ID = T4.PARENT_ID (+)

De esta manera, conseguiras cruzar todas las tablas.
Y si puedes ver, veras que para lograr sumar los 4 registros del codigo C1, solo debes hacer un count del campo T1.ID porque como dije, estan desplegadas todas las combinaciones.

Como se lograr el numero de combinaciones en un columna? Facil...
Agregas la siguiente funcion analitica en el select de la siguiente manera...

SELECT T1.ID, T2.ID, T3.ID, T4.ID,
COUNT(*) OVER(PARTITION BY T1.ID) CANTIDAD_POR_T1
FROM ....

Y listo !!!!!!

Espero que sea de ayuda.

Un saludo grande,
Stradivarius.
  #3 (permalink)  
Antiguo 21/10/2010, 08:54
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 14 años
Puntos: 0
Respuesta: Contar registros en relacion muchos a muchos

hola, gracias por responder, pensé k la pregunta era caso perdido.

con respecto a tu respuesta, la verdad soy un poco novato aun, y no se implementar bien el outer join.

en esta parte no se construir la parte del select
Código:
FROM TABLA1 T1, TABLA2 T2, TABLA3 T3, TABLA4 T4
WHERE T1.ID = T2.PARENT_ID (+)
AND T2.ID = T3.PARENT_ID (+)
AND T3.ID = T4.PARENT_ID (+)
y en esta otra, me podrías indicar el OVER(PARTITION BY ...) k función cumple
Código:
SELECT T1.ID, T2.ID, T3.ID, T4.ID,
COUNT(*) OVER(PARTITION BY T1.ID) CANTIDAD_POR_T1
FROM ....)
y otra ves muchas gracias por el tiempo
  #4 (permalink)  
Antiguo 21/10/2010, 10:42
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 14 años
Puntos: 0
Respuesta: Contar registros en relacion muchos a muchos

AL FINAL LO LOGRE DE ESTA MANERA, TENIENDO EN CUENTA LA IDEA K Stradivarius64 ME PLANTEO,
LAS CONSULTA ME KEDARON DE LA SIGUIENTE MANERA, POR EL MOMENTO ME FUNCIONA NO SE NO SE SI LE VEN ALGÚN ERROR, LES CAMBIE LA CLAUSULA OVER(PARTITION BY ...) POR GROUP BY, PORK APARTE DE CONTARME LOS REGISTROS DE LA TABLA 4 LOS MEZCLABA CON LOS DE LA TABLA 3 O SERIA K LO IMPLEMENTE MAL NO SE?

Código:
select T1.ID, count(*)
from TABLA1 T1, TABLA2 T2, TABLA3 T3, TABLA4 T4
where T1.ID=T2.PARENT_ID
and T2.ID=T3.PARENT_ID
and T3.ID=T4.PARENT_ID group by T1.ID;

select T2.ID, count(*)
from TABLA2 T2, TABLA3 T3, TABLA4 T4
where T2.ID=T3.PARENT_ID
and T3.ID=T4.PARENT_ID group by T2.ID;

select T3.ID, count(*)
from TABLA3 T3, TABLA4 T4
where T3.ID=T4.PARENT_ID group by T3.ID;
  #5 (permalink)  
Antiguo 24/10/2010, 16:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Contar registros en relacion muchos a muchos

;)........

Etiquetas: contar, muchos, registros, relacion
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:40.