Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Como hacer una instruccion SQL que se basa en otras sql (https://www.clubdelphi.com/foros/showthread.php?t=69751)

JoAnCa 06-09-2010 17:28:41

Como hacer una instruccion SQL que se basa en otras sql
 
Hola a todos
Pues sucede que estoy migrando una BD de Access para MySQL, y me encontre con una dificultad que no se como solucionarla
Tal vez la solucion que use en access no fue la mas indicada, pero me resolvia el problema
El problema es que tengo una tabla donde en un campo se selecciona el tipo de PC (De Escritorio, Servidor o Portatil), y en un informe se hace un resumen donde se cuentan la cantidad de cada uno de ellos
La solucion que di en access fue:
- Crear una consulta filtrando por Servidores, otra basada en esa para totalizar la cantidad
- (y lo mismo para los otros tipos)
- Y otra consulta basada en esas 3, mas otros datos de la tabla para hacer el Informe

Pero cuando lo voy a hacer en MySQL, eso de las consultas anidadas me dejo "en blanco"

Es posible que lo que haya hecho es una "chapuza", pero agradeciaria que me indicaran como hacerlo en MySQL, o si no, una forma mejor de hacer lo que quiero

JoAnCa 06-09-2010 17:36:01

Estas son las Consultas
 
En Access solo se usaban dos tipos de PC, pero la filosofia es la misma

1ra Consulta: Para servidores Profesionales
Código SQL [-]
SELECT Computadoras.IDCENTRO, Computadoras.Servidor 
FROM Computadoras 
WHERE (((Computadoras.Servidor)="Profesional"));

2da Consulta para Totalizarlos:
Código SQL [-]
SELECT [cc _ServidoresProf].IDCENTRO, Count([cc _ServidoresProf].Servidor) AS CuentaDeServidor 
FROM [cc _ServidoresProf] 
GROUP BY [cc _ServidoresProf].IDCENTRO;

3ra Consulta para PC servidores
Código SQL [-]
SELECT Computadoras.IDCENTRO, Computadoras.Servidor 
FROM Computadoras 
WHERE (((Computadoras.Servidor)="PC Server"));

4ta Consulta para totalizarlos:
Código SQL [-]
SELECT [cc _ServidoresPC].IDCENTRO, Count([cc _ServidoresPC].Servidor) AS CuentaDeServidor 
FROM [cc _ServidoresPC] 
GROUP BY [cc _ServidoresPC].IDCENTRO;

Y la 5ta que lo resume todo:
Código SQL [-]
SELECT Entidades.CodEnt, Entidades.NombreEntidad, Centros.IdCentros, Centros.NombreCentro, cc_CantServPC.CuentaDeServidor AS CantServPC, cc_CantServProf.CuentaDeServidor AS CantServProf 
FROM Entidades INNER JOIN (
(Centros LEFT JOIN cc_CantServPC ON Centros.IdCentros = cc_CantServPC.IDCENTRO) 
INNER JOIN cc_CantServProf ON Centros.IdCentros = cc_CantServProf.IDCENTRO) 
ON Entidades.CodEnt = Centros.CODENT 
GROUP BY Entidades.CodEnt, Entidades.NombreEntidad, Centros.IdCentros, Centros.NombreCentro, cc_CantServPC.CuentaDeServidor, cc_CantServProf.CuentaDeServidor;

Como ven parece un poco "enredado" al menos para mi :o

JoAnCa 06-09-2010 20:16:33

El informe me debe salir así mas o menos:

Cant. Servidores
Centro Total de PC Profesional PC Server
-----------------------------------------------------
Centro 1 30 2 2
Centro 2 25 1 1


La franja horaria es GMT +2. Ahora son las 02:24:29.

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