FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Problema Con conteo de datos
Tengo la siguiente Consulta
Select Anomalias.Cve_Inst, Principal.Nombre_inst From Anomalias, Principal Principal Inner Join Anomalias On Principal.Cve_Inst = Anomalias.Cve_Inst Group By Anomalias.Cve_Inst, Principal.Nombre_Inst Esto me genera una pequeña tabla mas o menos asi: Cve_Inst Nombre_inst AB001 Pozo X AB002 Pozo Y AB003 Pozo Z BS000 Bat. A BS001 Bat. B Ahora necesito saber cuantos registros hay por cada Instalación, por el momento y como efectos de prueba, tengo 24 registros solamente 1 del Pozo X 1 del Pozo Y 1 del Pozo z 1 de la Bat. A 20 de la Bateria B. Si yo agrego un Count(Anomalias.Cve_Princ) me cuenta todo en conjunto o sea que me da el siguiente resultado: Cve_Inst Nombre_inst Count(Anomalias.Cve_Princ) AB001 Pozo X 24 AB002 Pozo Y 24 AB003 Pozo Z 24 BS000 Bat. A 24 BS001 Bat. B 480 ???? Y no debe ser así, para empezar. Por lo que noté el resultado real de registros que hay por instalación me lo multiplica por el numero completo de registros de la consulta, o sea en total tengo 24 registros. hice la prueba aumentado 3 registros mas y ocurre lo mismo pero a hora me los multiplica por 27. ¿como debo hacer la consulta para que me dé el resultado esperado? De antemano, muchas gracias.
__________________
http://www.imgsharing.com/uploads/1121174648007_A1.jpg Última edición por JamesBond_Mx fecha: 04-07-2003 a las 21:57:05. |
#2
|
|||
|
|||
Donde veo un error es en que agrupes en base a campos que no se repiten con la misma frecuencia, es decir, Anomalias.Cve_Inst y Principal.Nombre_inst no guardan una relación 1 a 1, de ahí que el SQL te agrupe primero por uno y luego por otro (las sumas por ello se incrementan una barbaridad y te multiplica número de instalaciones por número de anomalías cada uno, osea 20 - 20 - 20 - 480).
Si quieres ver cuantos anomalías tiene cada instalación, deberías agrupar sólo por la clave de instalacion (mejor incluso que por el campo Nombre_inst que es el que parece que utilizas, puesto que la clave sabes que es un valor único y requerido que no te jugará una mala pasada): Select Principal.Cve_inst, Count(Anomalias.Cve_Inst) From Anomalias, Principal Principal Inner Join Anomalias On Principal.Cve_Inst = Anomalias.Cve_Inst Group By Principal.Cve_inst Esto te devolverá el resultado que andas buscando.
__________________
Guía de Estilo |
#3
|
||||
|
||||
Ya probé tu consulta y el resultado sigue siendo el mismo.
Y el Problema es que necesito el Campo Nombre_Inst de la tabla Principal, para poder identificar de que Instalación se trata, por que yo sabre por medio de la clave cual es la instalación, pero un usuario cualquiera no lo sabrá, Asi que a fuerza necesito ese campo, y por ende, también necesito meterlo en el Group By, por que si no lo meto, me marca un error. Explico un poco más como estan mis tablas. La tabla anomalias contiene las anomalias encontradas en las instalaciones, la unica referencia a la instalación es el campo Cve_inst, que es la clave de la instaalción donde se encontró la a anomalía. La tabla Principal es donde estan las Instalaciones del distrito, la cual como clave principal es el campo Cve_Inst, tambien tiene una campo donde va el nombre de la Instalación y uno donde va el tipo de de Instalación, a mi el que me interesa utilizar de aqui es el nombre, por medio de la clave conecto las dos tablas en el inner Join y es una relación uno a varios, una instaalción tiene varias anomalias, entonces lo que yo necesito saber es cuantas anomalias tiene una instalación. Si hago la consulta con la pura tabla Anomalias, sale muy bien, pero me pondria la clave de la anomalia, y asi no me sirve. Me expliqué???
__________________
http://www.imgsharing.com/uploads/1121174648007_A1.jpg Última edición por JamesBond_Mx fecha: 04-07-2003 a las 22:27:12. |
#4
|
|||
|
|||
Quizás sea la forma en que está escrita la consulta, que a mí me suena un poco extraña, no sé que BD usas, pero mira a ver si esto va mejor, omitiendo la tabla Anomalias en la cláusula FROM:
Select Principal.Cve_inst, Count(Anomalias.Cve_Inst) From Principal Inner Join Anomalias On Principal.Cve_Inst = Anomalias.Cve_Inst Group By Principal.Cve_inst
__________________
Guía de Estilo |
#5
|
||||
|
||||
Ya salió.... Gracias por tu ayuda
__________________
http://www.imgsharing.com/uploads/1121174648007_A1.jpg |
#6
|
|||
|
|||
Ya de un principio me extrañó la forma de estar escrita la consulta (aunque como algunas BD como Access tiene una forma tan particular de escribir el SQL ...). Lo que te dije de la razón por la que te devolvía esos sumatorios, mejor olvídalo, no tiene nada que ver, la razón era porque accedías dos veces a la misma tabla.
__________________
Guía de Estilo |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|