Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/03/2019, 14:46
Avatar de Libras
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: Mostrar Trabajadores sin trabajo asignado actualmente

Código SQL:
Ver original
  1. CREATE TABLE #personas(
  2. id INT,
  3. nombre nvarchar(20)
  4. )
  5.  
  6. INSERT INTO #personas VALUES (1,'LIBRAS')
  7. INSERT INTO #personas VALUES (2,'Camatagua123')----Camatagua123
  8. INSERT INTO #personas VALUES (3,'forosDelWeb')----forosDelWeb
  9.  
  10.  
  11. CREATE TABLE #cargos
  12. (
  13. id INT,
  14. nombre nvarchar(20),
  15. descripcion nvarchar(20)
  16. )
  17.  
  18.  
  19. INSERT INTO #cargos VALUES (1,'VIGILANTE','vigilar')
  20. INSERT INTO #cargos VALUES (2,'Secretario','trabajos')
  21. INSERT INTO #cargos VALUES (3,'Tester','Test')
  22.  
  23.  
  24. CREATE TABLE #cargos_personas
  25. (
  26. id INT,
  27. persona INT,
  28. cargo INT,
  29. desde datetime,
  30. hasta datetime
  31. )
  32.  
  33. INSERT INTO #cargos_personas VALUES (1,1,2,'2019-03-04',NULL)
  34. INSERT INTO #cargos_personas VALUES (2,3,1,'2018-06-20','2018-09-03')
  35. INSERT INTO #cargos_personas VALUES (3,1,1,'2019-03-04','2019-03-03')
  36. INSERT INTO #cargos_personas VALUES (4,1,1,'2019-03-04','2019-03-03')
  37. INSERT INTO #cargos_personas VALUES (5,1,3,'2019-03-29','2019-04-30')
  38.  
  39.  
  40.  
  41. --Personas con cargo vigente
  42. SELECT t1.id, t1.nombre,t2.cargo, 'Sin Cargo Vigente' AS resultado FROM #personas AS t1
  43. LEFT JOIN (
  44. SELECT * FROM #cargos_personas AS t1
  45. WHERE  hasta <= getdate()
  46. ) AS t2 ON (t1.id=t2.persona)
  47. WHERE persona IS NOT NULL
  48.  
  49. UNION ALL
  50.  
  51. SELECT t1.id, t1.nombre,t2.cargo, 'No ha tenido Cargo' AS resultado FROM #personas AS t1
  52. LEFT JOIN (
  53. SELECT persona,cargo FROM #cargos_personas AS t1
  54. ) AS t2 ON (t1.id=t2.persona)
  55. WHERE persona IS NULL

Este es el resultado:

id nombre cargo resultado
1 LIBRAS 1 Sin Cargo Vigente
1 LIBRAS 1 Sin Cargo Vigente
3 forosDelWeb 1 Sin Cargo Vigente
2 Camatagua123 NULL No ha tenido Cargo

Si vemos los datos libras tiene un cargo vigente(cargo 3) y no aparece, solo aparecen los cargos ya vencidos de foros del web y de Libras, libras tuvo 2 veces el cargo y forosdelweb 1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 29/03/2019 a las 14:54