Ver Mensaje Individual
  #19 (permalink)  
Antiguo 11/11/2015, 15:20
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Entonces no entiendo para que las fechas, pero bueno lo que ocupas es algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #empleados(
  2. id_empleado INT,
  3. nombre VARCHAR(20),
  4. id_sucursal INT
  5. )
  6.  
  7. CREATE TABLE #sucursal(
  8. id INT,
  9. nombre VARCHAR(20)
  10. )
  11.  
  12. CREATE TABLE #salario(
  13. id_empleado INT,
  14. salario INT
  15. )
  16.  
  17. CREATE TABLE #descuento(
  18. id_empleado INT,
  19. fecha datetime
  20. )
  21.  
  22.  
  23. INSERT INTO #empleados VALUES (1,'Irvin', 1)
  24. INSERT INTO #empleados VALUES (2,'juan',1)
  25. INSERT INTO #empleados VALUES (3,'Adrian',1)
  26.  
  27. INSERT INTO #sucursal VALUES (1,'Multiplaza')
  28.  
  29. INSERT INTO #salario VALUES (1,251)
  30. INSERT INTO #salario VALUES (2,251)
  31. INSERT INTO #salario VALUES (3,265)
  32.  
  33. INSERT INTO #descuento VALUES (1,'06-11-2015')
  34. INSERT INTO #descuento VALUES (1,'06-11-2015')
  35. INSERT INTO #descuento VALUES (2,'08-11-2015')
  36.  
  37.  
  38.  
  39.  
  40.  
  41. SELECT * FROM(
  42. SELECT t1.nombre,t3.salario,0 descuento, t1.id_empleado FROM #empleados AS t1
  43. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  44. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  45. WHERE t2.id=1 AND t1.id_empleado NOT IN(
  46. SELECT descuentos.id_empleado FROM(
  47. SELECT t1.nombre,t3.salario,COUNT(t4.id_empleado) descuentos, t1.id_empleado FROM #empleados AS t1
  48. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  49. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  50. LEFT JOIN #descuento AS t4 ON (t4.id_empleado=t1.id_empleado)
  51. WHERE t2.id=1 AND t4.fecha BETWEEN '06-11-2015' AND '07-11-2015'
  52. GROUP BY t1.nombre,t3.salario,t1.id_empleado
  53. ) AS descuentos
  54. )
  55. ) AS no_descuento
  56. UNION
  57. SELECT * FROM(
  58. SELECT t1.nombre,t3.salario,COUNT(t4.id_empleado) descuentos, t1.id_empleado FROM #empleados AS t1
  59. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  60. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  61. LEFT JOIN #descuento AS t4 ON (t4.id_empleado=t1.id_empleado)
  62. WHERE t2.id=1 AND t4.fecha BETWEEN '06-11-2015' AND '07-11-2015'
  63. GROUP BY t1.nombre,t3.salario,t1.id_empleado
  64. ) AS descuentos

Ojo la sentencia para las tablas temporales esta en Sql server, pero el query te puede servir para lo que necesitas, este es el resultado:

nombre salario descuento id_empleado
Adrian 265 0 3
Irvin 251 2 1
juan 251 0 2


saludos!

P.D: Para sacar lo que necesitas no queda de otra mas que usar union, no esta bien el query porque queda demasiado rebuscado, pero si es lo que ocupas.......otra cosa tus tablas estan mal normalizadas.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me