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

Union de consultas

Estas en el tema de Union de consultas en el foro de Bases de Datos General en Foros del Web. Hola a todos. Tengo una tabla y quiero hacer una union de consultas : SELECT count(*) as administrativos FROM empleados WHERE tipo = 'administrativo' UNION ...
  #1 (permalink)  
Antiguo 21/01/2009, 09:48
 
Fecha de Ingreso: marzo-2006
Mensajes: 178
Antigüedad: 18 años, 1 mes
Puntos: 1
Union de consultas

Hola a todos.

Tengo una tabla y quiero hacer una union de consultas :

SELECT count(*) as administrativos FROM empleados WHERE tipo = 'administrativo' UNION SELECT count(*) as productores FROM empleados WHERE tipo = 'produccion'

Esta consulta efectivamente me arroja los dos counts como resultado, el problema es que me da los dos resultados en una misma columna llamada "administrativos".

Es posible obtener estos dos resultados en dos columnas distintas?, por ejemplo una llamada "administrativos" y otra llamada "productores" ??

Agradeceria mucho ua respuesta, saludos a todos.
  #2 (permalink)  
Antiguo 21/01/2009, 10:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Union de consultas

Código:
SELECT sum(SbC.prod) as productores, sum(SbC.adm) as administrativos
FROM (SELECT 0 as prod, count(*) as adm
              FROM empleados WHERE tipo = 'administrativo' 
           UNION ALL
           SELECT count(*) as prod, 0 as adm
               FROM empleados WHERE tipo = 'produccion') as SbC;
mas simple

Código:
Select sum(iif(tipo = 'produccion',1,0)) as productores, 
           sum(iif(tipo = 'administrativo',1,0)) as administrativos
FROM empleados;
la función iif(condicion,siVerdadera,siFalsa) varia segun que servidor de bbdd uses...

Quim
  #3 (permalink)  
Antiguo 21/01/2009, 10:57
 
Fecha de Ingreso: marzo-2006
Mensajes: 178
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: Union de consultas

Optima respuesta, me funciono de inmediato, muchas gracias.(intente con la primera opcion, ya que en postgres no se si sirve el iif).

Una ultima consulta, que significan los SbC.prod, SbC.adm y SbC ??.

P.D: Esto es solo curiosidad ya que mi principal duda ya la solucionastes, muchas gracias.
  #4 (permalink)  
Antiguo 22/01/2009, 01:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Union de consultas

Código:
SELECT sum(SbC.prod) as productores, sum(SbC.adm) as administrativos
FROM (SELECT 0 as prod, count(*) as adm
              FROM empleados WHERE tipo = 'administrativo' 
           UNION ALL
           SELECT count(*) as prod, 0 as adm
               FROM empleados WHERE tipo = 'produccion') as SbC;

SbC es el alias de la SubConsulta.



Por otro lado busca la funcion equivalente al iif, juraria que tiene que existir, la segunda opción es más eficiente que la primera, especialmente si tienes muchos registros. (quizas simplemente es if())

Quim

Última edición por quimfv; 22/01/2009 a las 03:27
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 07:09.