SQL Server - Problemas con agrupacion

 
Vista:

Problemas con agrupacion

Publicado por yomero (8 intervenciones) el 25/06/2007 21:46:21
Hola a todos, tengo las siguientes tablas:

Acciones
-------------------------------------------------------------------------------------
Id_Accion Id_Ubicacion Actividad TipoAccion
-------------------------------------------------------------------------------------
1 10 5 1
2 5 5 1
3 10 5 1
4 5 3 2
5 7 3 2

Asistencia
-------------------------------------------------------------------------------------
Id_Accion Id_Persona
-------------------------------------------------------------------------------------
1 1
1 5
1 10
3 1
2 1
2 5

Lo que necesito hacer es lo siguiente :
- Recibir un parametro al procedimiento almacenado por el cual se filtraran las acciones (@TipoAccion) del resultado obtenido :
+ Hacer agrupacion por Id_Ubicacion
+ Obtener el total de acciones para cada Id_Ubicacion
+ Obtener el total de asistentes en cada Id_Ubicacion
+ Obtener el total de asistentes (sin repetirse) en cada Id_Ubicacion

Un resultado seria mas o menos como esto:

------------------------------------------------------------------------------------------------------------------------
Ubicación TotalAcciones TotalAsistencia AsistenciaEfectiva
------------------------------------------------------------------------------------------------------------------------
10 2 4 3
5 2 2 2
7 1 0 0

Elcaso es que tengo una hecho una consulta de esta forma:

SELECT Id_Ubicacion,Id_Accion,
(SELECT count(Id_Accion)
FROM Asistencia
WHERE (Id_Accion = Acciones.Id_Accion) ) AS AsistenciaTotal,
(SELECT count(DISTINCT Id_LN)
FROM Asistencia
WHERE (Id_Accion = Acciones.Id_Accion) ) AS AsistenciaEfectiva
FROM T_Acciones
WHERE (TipoAccion = @TipoAccion)
group by Id_Ubicacion,Id_Accion

Pero no me permite hacer la agrupacion por el Id_Ubicacion.... que estaré haciendo mal?

Saludos....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con agrupacion

Publicado por Yomero (8 intervenciones) el 25/06/2007 22:44:14
Lo logré...Muchas gracias por su ayuda... ya he solucionado el problema...

Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con agrupacion

Publicado por Isaias (3308 intervenciones) el 26/06/2007 00:02:25
Por compartir, deberias indicarnos donde estaba el error, tal vez a alguien mas le sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con agrupacion

Publicado por Yomero (8 intervenciones) el 26/06/2007 05:28:14
Pues resulta que me estaba complicando la vida al hacer varios select count cuando bien puedo ocupar un LEFT OUTER JOIN. Al final el query queda de la siguiente forma:

SELECT Acciones.Id_Ubicacion, Acciones.TipoAccion, COUNT (Acciones.Id_Ubicacion) as TotalAcciones, COUNT(Asistencia.Id_Persona) AS TotalAsistencia, COUNT(DISTINCT Asistencia.Id_Persona) as AsistenciaEfectiva
FROM Acciones LEFT OUTER JOIN
Asistencia ON Acciones.Id_Accion = Asistencia.Id_Accion
GROUP BY Acciones.Id_Ubicacion, Acciones.TipoAccion

Muchas gracias por todo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con agrupacion

Publicado por Yomero (8 intervenciones) el 26/06/2007 06:03:45
Hola de nuevo...

Analizando los resultados que me da el query anterior, he detectado que al ingresar en la tabla de asistencia mas de un mismo Id_Persona pero en diferentes Id_Accion y todas estas Id_Accion pertenecen a una misma Id_Ubicacion me incrementa el TotalAcciones. Tratare de explicarme mejor con el siguiente ejemplo:

Tengo originalmente 4 Acciones diferentes (TotalAcciones) en una misma Id_Ubicacion. Cada accion es identificada por su Id_Accion en la tabla Acciones y relacionada con la tabla Asistencia por el mismo campo. Ahora, si las Id_Persona no se repiten en todas estas Id_Accion las sumas de asistencia se realiza correctamente para esta Id_Ubicacion asi como el TotalAcciones. El problema reside en que si agrego una Id_Persona que ya existe en otra Id_Accion dentro de la misma Id_Ubicacion, la sumas de asistencia se realizan correctamente pero el total de acciones pasa a ser 5; si agrego otra Id_Persona en otra Id_Accion el total de acciones pasa a ser 6, cuando debería seguir siendo la misma cantidad de TotalAcciones (en este caso 4).

Espero haberme explicado...

Ahora si... que estará fallando? le he dado varias vueltas y no encuentro el error..

Muchas gracias por su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Aun no funciona...

Publicado por Yomero (8 intervenciones) el 26/06/2007 18:15:03
Hola de nuevo...

Analizando los resultados que me da el query anterior, he detectado que al ingresar en la tabla de asistencia mas de un mismo Id_Persona pero en diferentes Id_Accion y todas estas Id_Accion pertenecen a una misma Id_Ubicacion me incrementa el TotalAcciones. Tratare de explicarme mejor con el siguiente ejemplo:

Tengo originalmente 4 Acciones diferentes (TotalAcciones) en una misma Id_Ubicacion. Cada accion es identificada por su Id_Accion en la tabla Acciones y relacionada con la tabla Asistencia por el mismo campo. Ahora, si las Id_Persona no se repiten en todas estas Id_Accion las sumas de asistencia se realiza correctamente para esta Id_Ubicacion asi como el TotalAcciones. El problema reside en que si agrego una Id_Persona que ya existe en otra Id_Accion dentro de la misma Id_Ubicacion, la sumas de asistencia se realizan correctamente pero el total de acciones pasa a ser 5; si agrego otra Id_Persona en otra Id_Accion el total de acciones pasa a ser 6, cuando debería seguir siendo la misma cantidad de TotalAcciones (en este caso 4).

Espero haberme explicado...

Ahora si... que estará fallando? le he dado varias vueltas y no encuentro el error..

Muchas gracias por su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aun no funciona...

Publicado por Carlos Reyes (49 intervenciones) el 26/06/2007 21:23:05
Creo que no entiendo muy bien que es lo que quieres hacer, pero bueno, de acuerdo a lo que te entendi se me ocurre esto:

SELECT COUNT(Id_numero1),
(SELECT distinct COUNT(Id_numero2)
FROM TUTABLA2
INNER JOIN TuTabla1
on TUCampo2=tucampo1
AND Id_numero1=@tuVariabledeFiltrado
group by(Id_Ubicacion,Id_Persona)) AS TotPersUbic,
from TUTABLA1
WHERE Id_Accion=@tuVariabledeFiltrado

*En la primera parte del query obtienes la sumatoria de todas las acciones de un mismo tipo.
*En es subselect del query especificas una union de tus dos tablas por tu campo comun, creo que era Id_accion, bueno, lo unes por ese, y le especificas la accion mediante tu variable de filtrado y haces la agrupacion por id ubicacion y persona y obtienes el total de personas en la ubicacion no repetidas.

Espero haya entendido bien tu idea y que te sirva.

Suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aun no funciona...

Publicado por Yomero (8 intervenciones) el 26/06/2007 23:08:07
Ok... Muchas gracias por tu respuesta, pero lamentablemente no me funciona. Al ejecutarlo el sql me manda el error "La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión."

Ahora con respecto al query que muy amablemente escribiste te comento que la variable de filtrado únicamente la utilizo para sacar el total de acciones para las ubicaciones de cierto tipo y no para la asistencia.

Tratare de explicarme de nuevo:

Se realizan acciones de varios tipos en diferentes ubicaciones (la ubicacion puede ser de varios tipos), obviamente cada ubicacion puede tener una o mas acciones. Así mismo se cuenta con un listado de asistencia de personas para cada accion. Deseo saber la cantidad total de acciones para cada ubicacion; la cantidad total de personas que han asistido a todas las acciones por cada ubicacion (una misma persona puede asistir a varias acciones en la misma ubicacion) sin importar que se repitan las personas, de igual forma quiero saber la cantidad total de personas que han asistido a todas las acciones por cada ubicacion contando solamente una vez a las que se repitan (yo le llamo asistencia efectiva XD). Se debe mostrar todas las ubicaciones existentes por tipo (aqui es donde aplico el parametro de filtrado), el total de acciones para cada ubicacion, la asistencia total y la asistencia efectiva (obviamente si en una ubicacion hay acciones pero no asistentes, debe visualizar ceros en las asistencias :p)

Todo lo anterior lo consegui haciendo un left outer join y ya puse el codigo en respuestas anteriores, pero lamentablemente si una persona se repetia en varias acciones de una misma ubicacion, estas se sumaban al total de acciones.

Espero puedan ayudarme....

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar