Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/11/2013, 14:43
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: Tablas Pivoteadas con Multiples valores.

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. consecutivo VARCHAR(20),
  4. trabajador VARCHAR(20),
  5. labor1 INT,
  6. labor2 INT,
  7. labor3 INT
  8. )
  9.  
  10. INSERT INTO #temp VALUES ('01','001' ,1,0,0)
  11. INSERT INTO #temp VALUES ('01','002' ,0,1,0)
  12. INSERT INTO #temp VALUES ('01','003' ,0,0,1)
  13. INSERT INTO #temp VALUES ('01','004' ,0,1,0)
  14.  
  15.  
  16. INSERT INTO #temp VALUES ('02','001',0,0,1)
  17. INSERT INTO #temp VALUES ('02','002',0,0,1)
  18. INSERT INTO #temp VALUES ('02','003',0,1,0)
  19. INSERT INTO #temp VALUES ('02','004',1,0,0)
  20.  
  21.  
  22. INSERT INTO #temp VALUES ('03','001',1,0,0)
  23. INSERT INTO #temp VALUES ('03','002',1,0,0)
  24. INSERT INTO #temp VALUES ('03','003',1,0,0)
  25. INSERT INTO #temp VALUES ('03','004',1,0,0)
  26.  
  27.  
  28. INSERT INTO #temp VALUES ('04','001',0,1,0)
  29. INSERT INTO #temp VALUES ('04','002',0,1,0)
  30. INSERT INTO #temp VALUES ('04','003',1,0,0)
  31. INSERT INTO #temp VALUES ('04','004',0,0,1)
  32.  
  33.  
  34. CREATE TABLE #temp2
  35. (
  36. consecutivo VARCHAR(20),
  37. fecha datetime
  38. )
  39.  
  40. INSERT INTO #temp2 VALUES ('01','2013-11-01')
  41. INSERT INTO #temp2 VALUES ('02','2013-11-02')
  42. INSERT INTO #temp2 VALUES ('03','2013-11-03')
  43. INSERT INTO #temp2 VALUES ('04','2013-11-04')
  44.  
  45.  
  46.  
  47. SELECT trabajador,SUM([2013-11-01]) AS [2013-11-01],SUM([2013-11-02]) [2013-11-02],SUM([2013-11-03]) [2013-11-03],SUM([2013-11-04]) [2013-11-04]
  48. FROM
  49. (
  50.     SELECT trabajador,[2013-11-01],[2013-11-02],[2013-11-03],[2013-11-04] FROM
  51.     (
  52.     SELECT t1.consecutivo,t1.trabajador,
  53.     CASE WHEN labor1=1 THEN 1
  54.     WHEN labor2=1 THEN 2
  55.     WHEN labor3=1 THEN 3 END AS labor,
  56.     fecha FROM #temp AS t1
  57.     LEFT JOIN #temp2 AS t2 ON (t1.consecutivo=t2.consecutivo)
  58.     WHERE fecha BETWEEN '2013-11-01' AND '2013-11-04'
  59.     ) AS SOURCE
  60.     pivot
  61.     (
  62.     MAX(labor) FOR fecha IN ([2013-11-01],[2013-11-02],[2013-11-03],[2013-11-04])
  63.     ) AS pvt
  64. ) AS t1 GROUP BY trabajador

Para la parte de las fechas, se puede lograr con un query dinamico tomando en cuenta la diferencia de dias entre la fecha inicial y la fecha final y sacando las diferentes fechas con un ciclo para poder armar la cadena como quieres :P pero eso si ya seria por tu cuenta o con costo($$$$) adicional(se aceptan pagos por paypal :P)
__________________
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; 21/11/2013 a las 15:00