PDA

Ver la Versión Completa : Problemas para desplegar información detallada


Nelly
04-04-2007, 19:13:05
hola a todos!!!.

Tengo un problema para elaborar un reporte, lo que necesito mostrar en el reporte es lo siguiente:
-------------------------------------------------------------
Casilla Municipio Propietarios Suplente
-------------------------------------------------------------
125 Basica Merida 0 1
125 Contigua Merida 1 1

Los numeros que se enlistan son la cantidad de personas que hay capturadas como propietario y suplente, como bien se puede dar cuenta, en la 125 Basica hay un suplente y propietario no existe, en la 125 Contigua existe propietario y suplente, cabe mencionar que almaceno los valores en un campo de tipo varchar, pero necesito mostrarlo con numeros :D, vaya el campo se llama rep_casilla y almaceno lo siguiente(Propietario y Suplente), pero no encuentro la manera de mostras que tal casilla tiene tanta cantidad de gente capturada.
No se si me expliqué lo suficiente, en caso que tengan una duda o que de plano no me entendieron pueden hacerlo saber y vere otra manera de darme a entender.

egostar
04-04-2007, 19:20:27
hola a todos!!!.

Tengo un problema para elaborar un reporte, lo que necesito mostrar en el reporte es lo siguiente:
-------------------------------------------------------------
Casilla Municipio Propietarios Suplente
-------------------------------------------------------------
125 Basica Merida 0 1
125 Contigua Merida 1 1

Los numeros que se enlistan son la cantidad de personas que hay capturadas como propietario y suplente, como bien se puede dar cuenta, en la 125 Basica hay un suplente y propietario no existe, en la 125 Contigua existe propietario y suplente, cabe mencionar que almaceno los valores en un campo de tipo varchar, pero necesito mostrarlo con numeros :D, vaya el campo se llama rep_casilla y almaceno lo siguiente(Propietario y Suplente), pero no encuentro la manera de mostras que tal casilla tiene tanta cantidad de gente capturada.
No se si me expliqué lo suficiente, en caso que tengan una duda o que de plano no me entendieron pueden hacerlo saber y vere otra manera de darme a entender.

Pues no, yo no entiendo eso que dices, en un solo campo tienes al propietario y al suplente???

Así al vuelo, me parece raro que hayas definido así los campos, como se sabe quien es propietario y quien es suplente.

Salud OS.

Nelly
04-04-2007, 19:24:33
[quote=egostar]Pues no, yo no entiendo eso que dices, en un solo campo tienes al propietario y al suplente???

Así al vuelo, me parece raro que hayas definido así los campos, como se sabe quien es propietario y quien es suplente.


ok... Pues si... en el campo de rep_casilla se almacena al propietario y al suplente obviamente que no juntos, sino que cada uno con diferente persona por ejemplo. Juan Propietario y en otra fila Pedro como Suplente

egostar
04-04-2007, 19:30:25
ok... Pues si... en el campo de rep_casilla se almacena al propietario y al suplente obviamente que no juntos, sino que cada uno con diferente persona por ejemplo. Juan Propietario y en otra fila Pedro como Suplente

Perdon Nelly, pero sigo sin entender, si tienes el mismo campo rep_casilla, como es que sabes que es propietario o es suplente, ¿tienes algun status que lo deje saber?

Porque no pones un ejemplo de tu base para entender mejor, puede ser que así te podamos ayudar mejor.

Salud OS.

Nelly
04-04-2007, 19:40:29
se que estatus le corresponde a cada persona porque guardo la palabra(propietario y suplente), dependiendo cual escoja el usuario, y esos datos los muestro en un combo normal de la ventana de captura. Por eso se que tipo de estatus tiene cada persona capturada, pues almaceno la palabra(Propietario o Suplente).

egostar
04-04-2007, 19:47:27
se que estatus le corresponde a cada persona porque guardo la palabra(propietario y suplente), dependiendo cual escoja el usuario, y esos datos los muestro en un combo normal de la ventana de captura. Por eso se que tipo de estatus tiene cada persona capturada, pues almaceno la palabra(Propietario o Suplente).

Muy bien, así está mas claro, por mi parte comienzo a ver de que manera se puede solucionar y se que si se puede además de que aquí habra alguien mas que te ayude también.

Salud OS.

Nelly
04-04-2007, 20:01:50
Eres un amor, mil gracias... se que con tu ayuda y los que quieran opinar podre solucionar el problema

Caral
04-04-2007, 20:48:48
Hola Nelly
Seria interesante ver como llamas o en que sentencia llamas al reporte y a la consulta.
Mostrando un poco de codigo se ven mejor las cosas.
Saludos

egostar
04-04-2007, 21:37:17
Como estamos a un pasito de vacaciones y estoy en el relax total, hice esto que a mi me funcionó, puede que alguien conozca algo mejor, así que no es la única opción.

No se que base de datos utilices, yo lo hice con paradox que es lo mas limitado en cuanto a sentencias SQL, asi que te debería de servir para cualquiera. Además estoy usando los datos que nos muestras, no se si se llamen así

1. Agregas lo siguiente a una forma

Query1


select Casilla, count(casilla) as Propietarios from casillas
where Status = 'Propietario' group by casilla


DataSource1 ligado a Query1
DBGrid ligado a DataSource1

Query2


select Casilla, count(casilla) as Suplentes from casillas
where Status = 'Suplente' group by casilla


Table1
Que es la Tabla de Casillas.

2. Agrego campos nuevos en el Query1

Municipio(String) como lookup de la Table1
Suplentes(Integer) como lookup de Query2

3. Abres Query1 y te dará los campos que estas buscando.

Nota: Todo esto es en tiempo de diseño.

Espero que te sirva.

Salud OS.

Caral
04-04-2007, 21:53:21
Hola
No se si te parece amigo egostar, pero creo que se puede hacer con un solo query asi:
agregando un combobox para definir el tipo (propietario o suplente).

Query1.Active:= False;
Query1.SQL.Text := 'Select rep_casilla, count(casilla) as Tipo From casilla';
Query1.SQL.Add(' Where casilla.Status = '+Combobox1.Text);
Query1.SQL.Add(' group by rep_casilla');
Query1.Active := True;

Bueno con esto se ahorra tiempo, creo, que te parece?
Saludos

egostar
04-04-2007, 22:09:34
Gracias amigo, pero el problema es que se requiere que en la misma linea se tenga esto:

-------------------------------------------------------------
Casilla Municipio Propietarios Suplente
-------------------------------------------------------------
125 Basica Merida 0 1
125 Contigua Merida 1 1

Con tu query, tendriamos

caral 1
egostar 1
clubdelphi 1

En un solo query no lo pude hacer, intente esto


select Casilla, Municipio,
(select count(casilla) from casillas
where Tipo = 'Propietario' and casilla = q.casilla group by casilla) as Propietarios ,
(select count(casilla) from casillas
where Tipo = 'Suplente' and casilla = q.casilla group by casilla) as Suplentes
from casillas q
group by casilla


1. Manda error porque no se puede obtener Municipio en un query con el group by casilla
2. Le quito Municipio y me muestra Propietarios y Suplentes vacios.

Por eso fue que hice un query con campos agregados.

Salud OS.

Nelly
05-04-2007, 00:21:54
Gracias egostar (http://www.clubdelphi.com/foros/member.php?u=8123), igual a ti Caral... Ahora ya tengo un mejor escenario en relación al problema, pues utilizo la BD Firebird, con la consulta que mandas, vere si lo puedo manipular, despues les comento en que termino todo.

Saludos y muchas gracias...

Nelly
05-04-2007, 17:56:21
Hola buen dia a todos.... En relación al problema que tengo, hice la siguiente consulta basada en la que me mando egostar, aqui tengo mis campos reales, pero hay un detalle que no en todas cuenta bien, hay resultados que me arroja muy bien pero hay otros que cuenta uno de mas, y para ver si realmente si es asi, hago una consulta para extraer solo esa casilla con sus valores y veo que esta bien capturado, pero la consulta me dice que esta mal, el caso es que tengo la siguiente consulta:


select ca.seccion||' '||ca.tipo_casilla as casilla,
(select count(rep_casilla)from casilleros
where rep_casilla='PROPIETARIO 1' and sec_cuid=ca.seccion
and tipo_casilla=ca.tipo_casilla group by sec_cuid,tipo_casilla) as Propietarios,
(select count(rep_casilla)from casilleros
where rep_casilla='SUPLENTE' and sec_cuid=ca.seccion
and tipo_casilla=ca.tipo_casilla group by sec_cuid,tipo_casilla) as Suplentes
from casillas ca inner join casilleros c on ca.cve_casilla=c.cve_casilla
where ca.fecha_eleccion='20.05.2007'
group by ca.seccion,ca.tipo_casilla


Aqui le pido que solo sea de este año, creo que le doy mal uso al inner join por eso me arroja datos erroneos, no se si lo que plasmo ahi sea de la manera correcta.

Nelly
09-04-2007, 17:32:09
Hola veo que si se tomaron las vacaciones en serio, ya que nadie a respondido a mi llamado, que barbaros, aunque no me quejo de nada ya que yo tambien me tome unos merecidos dias de descanzo.
Espero y ahora si puedan ayudarme con la consulta que les mande anteriormente.
Saludos a los que aun estan de vacaciones!!!!!!!!!!.

egostar
10-04-2007, 03:17:06
Hola veo que si se tomaron las vacaciones en serio, ya que nadie a respondido a mi llamado, que barbaros, aunque no me quejo de nada ya que yo tambien me tome unos merecidos dias de descanzo.
Espero y ahora si puedan ayudarme con la consulta que les mande anteriormente.
Saludos a los que aun estan de vacaciones!!!!!!!!!!.

Hola Nelly, pues si, regresando de vacaciones.:cool:

En mi ejemplo sencillo donde tengo en la base de datos:

CASILLA MUNICIPIO REP_CASILLA TIPO

123 ALVARO OBREGON ELISEO Propietario
123 ALVARO OBREGON ISMAEL Suplente
123 ALVARO OBREGON JAIME Suplente
125 GUSTAVO A MADERO MIRNA Propietario
125 GUSTAVO A MADERO JORGE Propietario
125 GUSTAVO A MADERO JUAN Suplente
134 COYOACAN JAVIER Propietario

Me sale perfectamente el query

CASILLA MUNICIPIO PROPIETARIOS SUPLENTES

123 ALVARO OBREGON 1 2
125 GUSTAVO A MADERO 2 1
134 COYOACAN 1 <null>


select Casilla, Municipio,
(select count(rep_casilla) from casillas
where Tipo = 'Propietario' and casilla = q.casilla group by casilla) as Propietarios ,
(select count(casilla) from casillas
where Tipo = 'Suplente' and casilla = q.casilla group by casilla) as Suplentes
from casillas q
group by casilla, municipio


Estoy usando TDelphi y Firebird 2.0

Salud OS.

Nelly
10-04-2007, 17:24:15
ok... Dime, la consulta que puse anteriormente, tiene algo incorrecto, a lo que voy es si estoy violando alguna regla de SQL. O a tu consideración esta bien la consulta?

egostar
10-04-2007, 17:52:05
ok... Dime, la consulta que puse anteriormente, tiene algo incorrecto, a lo que voy es si estoy violando alguna regla de SQL. O a tu consideración esta bien la consulta?

Porque no hacemos una cosa, dinos como están estrucuturadas tus tablas, ya que por lo que veo estas utilizando dos tablas para obtener tu consulta.

Me parece que no estas usando correctamente el inner join e incluso dependiendo de como sea la estructura de las tablas puede o no ser necesario.

Espero tu respuesta para verificar tu sentencia SQL.

Salud OS.

Nelly
10-04-2007, 18:02:38
CREATE TABLE CASILLEROS (
CVE_CASILLERO INTEGER NOT NULL,
CVE_CASILLA INTEGER,
TIPO_CASILLA VARCHAR(30),
TIPO_REP INTEGER,
FECHA_ELECCION TIMESTAMP,
REP_CASILLA VARCHAR(20),
SEC_CUID VARCHAR(4),
CVE_ELEC VARCHAR(18),
CVE_RNM VARCHAR(18),
NESTATUS VARCHAR(32),
AP_PAT VARCHAR(30),
AP_MAT VARCHAR(30),
NOMBRE VARCHAR(60),
EDAD VARCHAR(3),
SECCION VARCHAR(4),
DOMICILIO VARCHAR(100),
CVE_MPO INTEGER,
FECHA_CURSO TIMESTAMP,
CURSO_TMDO VARCHAR(1) DEFAULT 'F',
COD_PARTIDO VARCHAR(20),
DIST_GRAL VARCHAR(5),
MPO_ORIG INTEGER,
FECHA_ALTA TIMESTAMP
);

CREATE TABLE CASILLAS (
CVE_CASILLA INTEGER NOT NULL,
DIST_LOC INTEGER,
DIST_FED INTEGER,
CVE_MPO INTEGER,
MUNICIPIO VARCHAR(100),
SECCION VARCHAR(4),
TIPO_SECCION VARCHAR(6),
PADRON_ELECTORAL INTEGER,
LISTA_NOMINAL INTEGER,
CASILLA VARCHAR(9),
TIPO_CASILLA VARCHAR(20),
UBICACION VARCHAR(80),
CALLE VARCHAR(32),
NO_EXT VARCHAR(10),
COLONIA VARCHAR(32),
CP VARCHAR(5),
REFERENCIA VARCHAR(80),
TIPO_DOMICILIO VARCHAR(80),
FECHA_ELECCION TIMESTAMP
);

egostar
10-04-2007, 19:13:08
Hola Nelly,

Pues ya he hecho pruebas con tu sentencia SQL y no me da los valores adecuados, hice una modificación y quedo así


select ca.cve_casilla, ca.municipio,

(select count(rep_casilla) from casilleros
where rep_casilla='PROPIETARIO 1' and cve_casilla = ca.cve_casilla group by rep_casilla) as Propietarios,

(select count(rep_casilla)from casilleros
where rep_casilla='SUPLENTE' and cve_casilla = ca.cve_casilla group by rep_casilla) as Suplentes

from casillas ca

where ca.fecha_eleccion = '20.05.2006 10:00:00'

group by ca.cve_casilla, ca.municipio


No use el inner join y me funciona bien.

Otra cosa que veo es que fecha_eleccion es un campo TIMESTAMP por lo que necesitas forzosamente incluir la hora exacta que tienes en tu base de datos, la otra es que hagas un between, algo así


where ca.fecha_eleccion between '20.05.2006' and '21.05.2006'


Salud OS.

Nelly
10-04-2007, 19:42:26
Hola egostar, ya quedo la consulta modifique uno que otro dato y en efecto no se necesita hacer un inner join, mil gracias por tu tiempo, lo bueno de todo esto es que ya funciona como quiero, MIL GRACIAS otra vez.

egostar
10-04-2007, 19:54:21
Que bueno que ya casi esta completo este hilo, lo que falta, a mi parecer, es que coloques la solución final para que en un futuro los compañeros que tengan una duda similar puedan acceder a este hilo y despejar sus dudas.

Creo que eso es realmente el espiritu de este club.

Salud OS.