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

Ayuda Sql para Reportes

Estas en el tema de Ayuda Sql para Reportes en el foro de Bases de Datos General en Foros del Web. Feliz Año nuevo Amig@s., lleno de exitos. Hasta ahora he estado haciendo consultas con Left Join y se un poco de inner join y right ...
  #1 (permalink)  
Antiguo 02/01/2005, 16:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 152
Antigüedad: 20 años, 7 meses
Puntos: 2
Ayuda Sql para Reportes

Feliz Año nuevo Amig@s., lleno de exitos.


Hasta ahora he estado haciendo consultas con Left Join y se un poco de inner join y right join, pero creo que no me sirven para hacer lo que pinso.

Simplificare mi duda y tambien las tablas que trabajo.

quiero Hacer el Siguiente reporte digamos:

Código:
CIUDAD | T1  |  T2  |  t3  | TOTAL
------------------------------------
   A   | 10  |  25  |   0  |  35
   B   | 20  |  25  |   5  |  50
   C   |  0  |   1  |  15  |  16
   D   |  5  |   4  |  10  |  19
------------------------------------
TOTAL  | 35  |  55  |  30  | 120
son 3 tablas las que quiero consultar, uno de PERSONA, CIUDAD, TIPO.

para la columno T1 seria facil:

Código:
SELECT CIUDAD.CID,COUNT(PERSONA.PID) FROM CIUDAD 
LEFT JOIN PERSONA ON PERSONA.CID=CIUDAD.CID
LEFT JOIN TIPO ON TIPO.TID=PERSONA.ID AND TIPO.TID='T1'
GROUP BY CIUDAD.CID
y asi tendria la primera columnA, pero lo que yo quiero es que en una consulta parecida se puede crear mas columas con los mismas condiciones.

diganme si estoy loco al pensar en esto, esque he estado investigando y nada, hay ejemplos sencillos. nada tan complejos para hacer reportes.

Denme una respuesta, quiero saber si tendria que hacer una consulta para cada columna?

haaa, trabajo con interbase

__________________
Mamani Calderón, Edwin Fredy
Ingeniería de Sistemas www.gruposistemas.com

Última edición por edwinmc; 02/01/2005 a las 16:39
  #2 (permalink)  
Antiguo 03/01/2005, 01:32
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Yo el interbase no lo controlo, pero lo que quieres hacer no es una tarea sencilla. Si los valores son concretos y pocos, se puede hacer por medio de sql, pero si son variados o muchos no es posible. Quizá la única forma sería utilizando procedimientos almacenados.
Para el caso que te ocupa, te puedo poner un ejemplo de como hacerlo en mysql y tú lo pasas interbase:
Código:
SELECT CIUDAD.CID,sum(if (PERSONA.PID="T1",1,0)) T1,sum(if (PERSONA.PID="T2",1,0)) T2,sum(if (PERSONA.PID="T3",1,0)) T3 
FROM CIUDAD 
LEFT JOIN PERSONA ON PERSONA.CID=CIUDAD.CID
LEFT JOIN TIPO ON TIPO.TID=PERSONA.ID
GROUP BY CIUDAD.CID
De manera similar se puede hacer con un case, pero en este caso no vale la pena.
En cuanto a la suma total, no te queda más remedio que calcularla por programación, a menos que lances la misma select quitando el campo ciudad.cid y el group by.
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 03/01/2005 a las 01:33
  #3 (permalink)  
Antiguo 04/01/2005, 21:20
 
Fecha de Ingreso: octubre-2003
Mensajes: 152
Antigüedad: 20 años, 7 meses
Puntos: 2
buena salida de eso de los IFs, lo malo que interbase no tiene nada parecido. ni modo tendre que hacer varias consultas. asi sera. TnKs
__________________
Mamani Calderón, Edwin Fredy
Ingeniería de Sistemas www.gruposistemas.com
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 00:06.