una transponer tabla insertar importar funcion fechas existente ejemplo datos con agregado sql sql-server-2005 pivot

transponer - pivot y unpivot sql server



Cómo pivotar datos desde una tabla con SQL Server 2005 (1)

Esto realmente se puede hacer bastante fácilmente con una función PIVOT . Como la otra respuesta no muestra el código asociado con la forma de realizarla, aquí hay dos formas de PIVOT los datos.

Primero es con un pivote estático . Un pivote estático es cuando conoce los datos antes de tiempo para convertirlos en columnas.

select * from ( select name, id, convert(char(5), dt, 101) dt, jobid, amount from test ) x pivot ( sum(amount) for dt in ([01/02], [02/02], [03/02], [04/05], [05/05]) )p order by jobid, name

Ver SQL Fiddle con demostración

La segunda forma es usar un Dynamic PIVOT para identificar en tiempo de ejecución los valores para convertirlos en columnas.

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct '','' + QUOTENAME(convert(char(5), dt, 101)) from test FOR XML PATH(''''), TYPE ).value(''.'', ''NVARCHAR(MAX)'') ,1,1,'''') set @query = ''SELECT name, id, '' + @cols + '', jobid from ( select name, id, convert(char(5), dt, 101) dt, jobid, amount from test ) x pivot ( sum(amount) for dt in ('' + @cols + '') ) p order by jobid, name'' execute(@query)

Ver SQL Fiddle con demostración

Ambos producirán los mismos resultados. La dinámica funciona muy bien cuando no se conocen los valores antes de tiempo para convertir a columnas.

Me gustaría crear una consulta desde una sola tabla con las siguientes columnas.

SEQNO es una clave única

Name ID Amount Date JOBID SEQNO Mark 9 200 1/2/09 1001 1 Peter 3 300 1/2/09 1001 2 Steve 1 200 2/2/09 1001 3 Mark 9 200 3/2/09 1001 4 Peter 3 300 4/2/09 1001 5 Steve 1 200 5/2/09 1001 6 Hally 1 200 5/2/09 1002 7

La consulta debe salir en este formato por SUBJOBID y un rango de fechas:

**NAME ID 1/2 2/2 3/2 4/2 5/2 JOBID**<br> Mark 9 200 NULL 200 NULL NULL 1001 Peter 3 300 NULL NULL 300 NULL 1001 Steve 1 NULL 200 NULL NULL 200 1001

He estado revisando las consultas pivote para esto. Pero no parece llegar a ningún lado. ¿Podría alguien ayudar?