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

Duda con una consulta

Estas en el tema de Duda con una consulta en el foro de Mysql en Foros del Web. Tengo esta consulta: Código: SELECT hpla.empl, hpla.nombre, hpla.patern, hpla.matern, SUM(estimulos.monto), centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun FROM hpla, centros, ramas, estimulos, pue WHERE hpla.cenres = centros.cenres ...
  #1 (permalink)  
Antiguo 21/05/2012, 16:04
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 14 años, 6 meses
Puntos: 2
Duda con una consulta

Tengo esta consulta:

Código:
SELECT hpla.empl, hpla.nombre, hpla.patern, hpla.matern, SUM(estimulos.monto),
centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun  
FROM hpla, centros, ramas, estimulos, pue 
WHERE hpla.cenres = centros.cenres AND 
hpla.codfun = pue.codfun AND 
ramas.rama = pue.rama AND 
estimulos.empl = hpla.empl 
GROUP BY hpla.empl, hpla.nombre, hpla.patern, hpla.matern, estimulos.monto,
centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun  
ORDER BY empl
el resultado de este query sería algo asi:



como pueden ver en el recuadro rojo los dos primeros registros son de una misma persona lo unico que cambia es el tipo de pago.


La pregunta es:

Existe alguna forma de que el resultado de esta consulta sea que si la misma persona tiene varios tipos de pagos me ponga estos en un solo registro????


En otras palabras me gustaria hacer un concat pero vertical

Última edición por devilboy9999; 21/05/2012 a las 16:27
  #2 (permalink)  
Antiguo 22/05/2012, 10:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 14 años, 6 meses
Puntos: 2
De acuerdo [Solucionado] Duda con una consulta

Investigando vi la funcion group_concat y me funcionó perfectamente.

les dejo como tenia mi consulta y como hice una concatenacion vertical


anterior:

Código:
SELECT hpla.empl, hpla.nombre, hpla.patern, hpla.matern, SUM(estimulos.monto),
centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun  
FROM hpla, centros, ramas, estimulos, pue 
WHERE  hpla.cenres = centros.cenres AND 
hpla.codfun = pue.codfun AND 
ramas.rama = pue.rama AND 
estimulos.empl = hpla.empl 
GROUP BY hpla.empl, hpla.nombre, hpla.patern, hpla.matern, estimulos.monto,
centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun  
ORDER BY empl
con group_concat:

Código:
SELECT hpla.empl, hpla.nombre, hpla.patern, hpla.matern, SUM(estimulos.monto),
centros.centro, ramas.desram, estimulos.pago, ramas.rama, hpla.codfun, GROUP_CONCAT(pago SEPARATOR '-'), GROUP_CONCAT(estimulos.monto SEPARATOR '-') 
FROM hpla, centros, ramas, estimulos, pue 
WHERE hpla.cenres = centros.cenres AND 
hpla.codfun = pue.codfun AND 
ramas.rama = pue.rama AND 
estimulos.empl = hpla.empl 
GROUP BY empl
ORDER BY empl
salu2
  #3 (permalink)  
Antiguo 23/05/2012, 05:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda con una consulta

Código MySQL:
Ver original
  1. SELECT hpla.empl,
  2.              hpla.nombre,
  3.              hpla.patern,
  4.              hpla.matern,
  5.              SUM(IF(estimulos.pago="P",estimulos.monto,0)) as TotalPagosP,
  6.              SUM(IF(estimulos.pago="O",estimulos.monto,0)) as TotalPagosO,
  7.              SUM(estimulos.monto) as TotalPagos
  8.              centros.centro,
  9.              ramas.desram,
  10.              ramas.rama,
  11.              hpla.codfun  
  12. FROM hpla,
  13.           centros,
  14.           ramas,
  15.           estimulos,
  16.           pue
  17. WHERE hpla.cenres = centros.cenres
  18.    AND hpla.codfun = pue.codfun
  19.    AND ramas.rama = pue.rama
  20.    AND estimulos.empl = hpla.empl
  21. GROUP BY hpla.empl,
  22.                  hpla.nombre,
  23.                  hpla.patern,
  24.                  hpla.matern,
  25.                  estimulos.monto,
  26.                  centros.centro,
  27.                  ramas.desram,
  28.                  ramas.rama,
  29.                  hpla.codfun  

Es question que en la lista de campos de GROUP BY no tengas el tipo de pago... es decir la suma se hace para cada cambio en el conjunto de datos que pongas en GROUP BY...

Si hubiera un empledao en dos ramas.rama tambien tendrias el problema de dos registros para ese usuario.

ORDER BY tampoco es necesario....

Estudia la sintaxis de JOIN es mas actual que la que usas...

Esta solucion es mas SQL standar que la tuya.....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 23/05/2012 a las 05:32

Etiquetas: registros, select
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 15:32.