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

consultas dobles

Estas en el tema de consultas dobles en el foro de Bases de Datos General en Foros del Web. Hola necesito de su ayuda quiero unir dos resultados de dos select que tengo el primero muestra los descuentos y la suma de ellos @import ...
  #1 (permalink)  
Antiguo 12/11/2015, 10:28
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 9 años
Puntos: 0
consultas dobles

Hola necesito de su ayuda quiero unir dos resultados de dos select que tengo

el primero muestra los descuentos y la suma de ellos
Código SQL:
Ver original
  1. SELECT A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,C.SALARIOEMPLE,B.NOMBRESUCURSAL,COUNT(DESCUENTO) AS NDESCUENTO, SUM(DESCUENTO) AS DESCUENTO
  2. FROM   EMPLEADO A
  3. INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
  4. INNER JOIN SALARIO C ON A.IDEMPLEADO = C.IDEMPLEADO
  5. LEFT JOIN DESCUENTO D ON A.IDEMPLEADO = D.IDEMPLEADO
  6. WHERE A.IDSUCURSAL = 1 AND (D.fecha BETWEEN '2015-11-06' AND '2015-11-10')
  7. GROUP BY A.IDEMPLEADO
  8. UNION ALL
  9. SELECT  A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,C.SALARIOEMPLE,B.NOMBRESUCURSAL,0 AS NDESCUENTO, 0 AS DESCUENTO,0 AS numerodia,0 AS sumaex
  10. FROM   EMPLEADO A
  11. INNER JOIN SALARIO C ON A.IDEMPLEADO = C.IDEMPLEADO
  12. INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
  13. WHERE A.IDSUCURSAL = 1
  14. AND A.IDEMPLEADO NOT IN (
  15. SELECT DISTINCT A.IDEMPLEADO
  16. FROM   EMPLEADO A
  17. LEFT JOIN DESCUENTO D ON A.IDEMPLEADO = D.IDEMPLEADO
  18. WHERE A.IDSUCURSAL = 1 AND (D.fecha BETWEEN '2015-11-06' AND '2015-11-10')
  19. )
y el segundo muestra los diasextras trabajado y su total

Código SQL:
Ver original
  1. SELECT  A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,
  2. C.SALARIOEMPLE,B.NOMBRESUCURSAL,
  3. SUM(NUMERODIA) AS NUMERODIA,SUM(VALOR) AS SUMAEX FROM EMPLEADO A
  4. INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
  5. INNER JOIN SALARIO C ON A.IDEMPLEADO = C.IDEMPLEADO
  6. LEFT JOIN DIAEX E ON E.IDEMPLEADO=A.IDEMPLEADO
  7. WHERE A.IDSUCURSAL=1
  8. AND E.FECHA BETWEEN'2015-11-06' AND '2015-11-10'
  9. GROUP BY A.IDEMPLEADO
  10. UNION ALL
  11. SELECT   A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,
  12. C.SALARIOEMPLE,B.NOMBRESUCURSAL,
  13. 0 AS NUMERODIA,0 AS SUMAEX FROM EMPLEADO A
  14. INNER JOIN SALARIO C ON A.IDEMPLEADO=C.IDEMPLEADO
  15. INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
  16. WHERE A.IDSUCURSAL = 1
  17. AND A.IDEMPLEADO NOT IN(
  18. SELECT DISTINCT A.IDEMPLEADO
  19. FROM EMPLEADO A
  20. LEFT JOIN DIAEX E ON A.IDEMPLEADO=E.IDEMPLEADO
  21. WHERE A.IDSUCURSAL=1 AND (E.FECHA BETWEEN'2015-11-06' AND '2015-11-10')
  22. )
si los uno los dos me repite los empleados dos veces donde los primeros 3 (solo 3 datos hay en idsucursal=1) me muestra sus descuentos pero luego me vuelve a mostrar esos mismos 3 solo que ahora don el dia extra y su valor lo que quiero es que solo me liste los 3 empleados y ahi me aprezcan sus descuentos y dias extras juntos

les agradeceria mucho si me pudieran ayudar
  #2 (permalink)  
Antiguo 12/11/2015, 11:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: consultas dobles

En lugar de hacer un union o union all, prueba con un inner join :)

Código MySQL:
Ver original
  1. Select * from ( consulta 1) as resultado1
  2. Inner join (consulta 2) as resultado2 on (resultado1.empleado=resultado2.empleado)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: consulta-mysql
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 11:14.