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

Filas en Columnas con Pivote SQL Server 2008

Estas en el tema de Filas en Columnas con Pivote SQL Server 2008 en el foro de SQL Server en Foros del Web. Tengo un query que genera este resultado: problem_category_description line_name issue_date problem_total Form V1.3 Clockspring AB 2014-06-23 9 Function V1.3 Clockspring AB 2014-05-05 4 Function V1.3 ...
  #1 (permalink)  
Antiguo 07/08/2014, 15:24
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Filas en Columnas con Pivote SQL Server 2008

Tengo un query que genera este resultado:

problem_category_description line_name issue_date problem_total
Form V1.3 Clockspring AB 2014-06-23 9
Function V1.3 Clockspring AB 2014-05-05 4
Function V1.3 Clockspring AB 2014-05-06 7
Function V1.3 Clockspring AB 2014-06-09 5
Function V1.3 Clockspring AB 2014-06-12 2
Function V1.3 Clockspring AB 2014-06-17 1

y quiero llegar a este otro resultado:

problem_category_description line_name 2014-06-23 2014-05-05 .....
Form V1.3 Clockspring AB 9 0
Function V1.3 Clockspring AB 0 4
...
.....

Esta es la sintaxis del query:
Código SQL:
Ver original
  1. SELECT     problem_category_description, line_name, issue_date, COUNT(problem_category_id) AS Problem_Total
  2. FROM         dbo.Dvd2
  3. WHERE     (area_id = '2') AND (line_id = '63')
  4. GROUP BY problem_category_description, line_name, issue_date, failure
Agradeceria su ayuda =)

Última edición por gnzsoloyo; 08/08/2014 a las 07:49
  #2 (permalink)  
Antiguo 07/08/2014, 15:41
Avatar de 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: Filas en Columnas con Pivote SQL Server 2008

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. dato1 VARCHAR(20),
  4. dato2 VARCHAR(20),
  5. dato3 VARCHAR(20),
  6. dato4 VARCHAR(20),
  7. dato5 datetime,
  8. dato6 INT
  9. )
  10.  
  11. INSERT INTO #temp VALUES ('Form','V1.3','Clockspring','AB','2014-06-23',9)
  12. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-05-05',4)
  13. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-05-06',7)
  14. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-09',5)
  15. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-12',2)
  16. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-17',1)
  17.  
  18.  
  19. SELECT dato1,dato2,dato3,dato4,[2014-06-23],[2014-05-05],[2014-05-06],[2014-06-09],[2014-06-12],[2014-06-17]
  20. FROM
  21. (
  22. SELECT dato1,dato2,dato3,dato4,dato5,dato6 FROM #temp
  23. ) AS sourcetable
  24. pivot
  25. (
  26. MAX(dato6) FOR dato5 IN ([2014-06-23],[2014-05-05],[2014-05-06],[2014-06-09],[2014-06-12],[2014-06-17])
  27. ) AS pivote

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/08/2014, 07:10
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Filas en Columnas con Pivote SQL Server 2008

Gracias por responder Libras, lo que pasa que no son fijas las fechas, osea pueden ser 10 o 20 0 500 fechas no estan establecidas, voy a tener tantas columnas como registros tenga.


Saludos!!!!
  #4 (permalink)  
Antiguo 08/08/2014, 07:34
Avatar de 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: Filas en Columnas con Pivote SQL Server 2008

un query dinamico amigo con un query dinamico obtienes lo que necesitas, pero como se que no puedes hacerlo ni vas a tener la delicadeza de buscar como aqui te dejo como hacerlo:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. dato1 VARCHAR(20),
  4. dato2 VARCHAR(20),
  5. dato3 VARCHAR(20),
  6. dato4 VARCHAR(20),
  7. dato5 datetime,
  8. dato6 INT
  9. )
  10.  
  11.  
  12. INSERT INTO #temp VALUES ('Form','V1.3','Clockspring','AB','2014-06-23',9)
  13. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-05-05',4)
  14. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-05-06',7)
  15. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-09',5)
  16. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-12',2)
  17. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-13',6)
  18. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-14',7)
  19. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-15',20)
  20. INSERT INTO #temp VALUES ('Function','V1.3','Clockspring','AB','2014-06-16',100)
  21.  
  22.  
  23.  
  24. SELECT DISTINCT dato5 AS fecha,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp
  25.  
  26.  
  27. DECLARE @x INT
  28. DECLARE @query Nvarchar(MAX)
  29. DECLARE @fechas Nvarchar(MAX)
  30. SET @x=1
  31. SET @fechas=''
  32. while @x<=(SELECT COUNT(*) FROM #temp)
  33. BEGIN
  34. SET @fechas= @fechas + (SELECT '[' + CONVERT(VARCHAR(20),fecha,110) + ']' FROM #temp2 WHERE rn=@x) + ','
  35. SET @x=@x+1
  36. END
  37.  
  38. SET @fechas=SUBSTRING(@fechas,1,len(@fechas)-1)
  39.  
  40. SET @query='select dato1,dato2,dato3,dato4, ' + @fechas +
  41. ' from
  42. (
  43. select dato1,dato2,dato3,dato4,dato5,dato6 from #temp
  44. ) as sourcetable
  45. pivot
  46. (
  47. max(dato6) for dato5 in ( ' + @fechas + ')
  48. ) as pivote'
  49.  
  50. EXEC sp_executesql @query
  51. DROP TABLE #temp2

Este query funciona para N columnas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 26/11/2014, 17:05
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Filas en Columnas con Pivote SQL Server 2008

hola libras tu ejemplo me sirvió mucho :D , pero sabes necesito meter una segunda columna, osea un segundo pivot, y mi pregunta es como podría hacerlo?, por ejemplo lo que quiero es mas o menos asi:

animal cantidad-semama1 importe-semana1 cantidad-semana2 importe-semana2
perro 2 20 1 10
gato 3 15 2 10
loro 1 5 0 0

ya que lo que tengo ahorita empleando tu ejemplo, es solo las columnas de importe digamos, me faltaría meter las columnas de cantidad.

de antemano muchas gracias.
  #6 (permalink)  
Antiguo 26/11/2014, 17:09
Avatar de 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: Filas en Columnas con Pivote SQL Server 2008

un ejemplo de como esta tu info y como quieres que quede ayudaria mucho :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 27/11/2014, 16:02
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Filas en Columnas con Pivote SQL Server 2008

mas o menos asi tengo mi tabla, bueno es una parte de la tabla

codigo/concepto/ unidad/nombre_estimacion/cantidad/importe
A0101/trazo /m3/1(UNO)/1373.0000/ 5478.2700
A0101/trazo / m3/5(CINCO)/176.3500 /703.6400
A0101/trazo /m3/8(OCHO)/51.3100/ 204.7300
A0201/excavacion/m3/12(DOCE)/216.1900/ 8740.5600
A0201/excavacion/m3/2(DOS)/858.5820/ 34712.4700
A0201/excavacion/m3/3(TRES)/1399.2700 /56572.49
A0201/excavacion/m3/4(CUATRO)/195.6400 /7909.730
A0201/excavacion/m3/8(OCHO)/33.4700/ 1353.1900
A0201/excavacion/m3/9(NUEVE)/37.7300/1525.4200
A0202/aplanado /m3/12(DOCE)/164.0600/7958.5500
A0202/aplanado /m3/2(DOS)/455.6580/ 22103.9700
A0202/apalanado /m3/3(TRES)/589.6500 /28603.9200


y quisiera que me quedara asi:

codigo/ concepto/unidad/cantidad 1(uno)/importe 1(uno) /cantidad2(dos)/ importe 2(dos) etc.......
A0101/trazo/m3/ 1373.0000/5478.2700 0 /0
A0201/plabntilla/m3/ 0 /0 858.5820 /34712.4700
A0202/relleno/m3/ 0 /0 455.6580 22103.9700
A0203/pavimento/m3/ 0 /0 0/ 0
A0204/suministro/m3/ 0 /0 0/0
A0301/instalacion/m3/ 0 /0 248.1521 27822.8100
A0302/carga/m3/ 0 /0 438.5240 51649.3600
A0401/prueba/m3/ 0 /0 1048.7816 37158.3300
A0402/pozo/m3/ 0 /0 2097.5600 11767.3100
A0501/perforacion/m3/ 0 /0 1.0000 6726.7100
A0601/aplanado/m3/ 0 /0 300.0200 2052.1400
A0602/reparacion/m3/ 0 /0 13.5009 1366.0200


espero se entienda,(las diagonales las pongo para separar las columnas) y asi quisiera que quedara.

gracias por tu atencion y ayuda gracias.
  #8 (permalink)  
Antiguo 27/11/2014, 16:15
Avatar de 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: Filas en Columnas con Pivote SQL Server 2008

te entiendo hasta cantidad1 e importe1, los siguientes de donde salen???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 01/12/2014, 09:20
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Filas en Columnas con Pivote SQL Server 2008

aaa es que si te fijas en el de arriba en nombre de estimacion esta 1(uno),5(cinco),8(ocho), 12(doce),2(dos), etc.. esos nombres son los que quiero que aparescan como titulos de columnas con "cantidad" e "importe", cantidad 2(dos), importe2(dos), etc y los numeros son las cantidades e importes (valga la redundancia) que hay en cada estimacion de cada concepto.

Espero darme a entender y muchas gracias nuevamente. :D

Etiquetas: asp.net, sql, sql-server-2008
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 19:57.