Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
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.

Última edición por JamesBond_Mx fecha: 04-07-2003 a las 21:57:05.
Responder Con Cita
  #2  
Antiguo 04-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 04-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
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é???

Última edición por JamesBond_Mx fecha: 04-07-2003 a las 22:27:12.
Responder Con Cita
  #4  
Antiguo 04-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 04-07-2003
Avatar de JamesBond_Mx
JamesBond_Mx JamesBond_Mx is offline
Miembro
 
Registrado: jul 2003
Ubicación: Poza Rica, Veracruz, México
Posts: 81
Poder: 21
JamesBond_Mx Va por buen camino
Ya salió.... Gracias por tu ayuda
Responder Con Cita
  #6  
Antiguo 04-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:27:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi