SQL Server - convertir filas a columnas

 
Vista:

convertir filas a columnas

Publicado por lorihen (1 intervención) el 29/12/2010 17:04:15
nombre fecha hora_entrada
Juan Perez 01/01/2008 08:00
Juan Perez 02/01/2008 08:15
Juan Perez 03/01/2008 08:20
Karina Torrez 01/01/2008 08:03
Karina Torrez 02/01/2008 08:07
Karina Torrez 03/01/2008 08:19

Y necesito que la informacion se me presente de la siguiente manera:

Nombre 01/01/2008 02/01/2008 03/01/2008
Juan Perez 08:00 08:15 08:20
Karina Torrez 08:03 08:07 08:19

Como puedo hacer para convertir las filas en columnas y presentar la
informacion como la necesito ?????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:convertir filas a columnas

Publicado por Isaias (4558 intervenciones) el 29/12/2010 17:17:35
Espero te sirva:

http://msdn.microsoft.com/es-es/library/bb972215.aspx

En la web, hay muchos tips al respecto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir filas a columnas

Publicado por Sebastian (3 intervenciones) el 04/01/2011 15:55:51
--Creamos el procedimiento almacenado.

CREATE PROCEDURE PR_crosstab
@TABLA varchar(255),
@PIVOT VARCHAR(255),
@AGRUPACION varchar(255),
@CAMPO varchar(255),
@CALCULO varchar(20)
AS

--Declaramos las variables que nos permitirán crear el sql con los "CASES"

DECLARE @STRG AS VARCHAR(8000) DECLARE @SQL AS VARCHAR(8000) CREATE TABLE #PIVOT ( PIVOT VARCHAR (8000) )
-- limpiamos las variables por si a caso

SET @STRG='' SET @SQL=''

-- ALMA MATTER DEL PIVOT TABLE

/* En el siguiente código realizamos un "select distinct" del campo que usaremos como pivote, a cada registro le concatenamos su correspondiente "CASE" y lo almacenamos en una tabla temporal llamada #PIVOT
*/
SET @STRG=@STRG + 'INSERT INTO #PIVOT SELECT DISTINCT ''' + @CALCULO + '(CASE WHEN ' + @PIVOT + '=''''''+ RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(500))) + '''''' THEN ' + @CAMPO + ' ELSE NULL END) AS ''''' + @CALCULO + '_'' +
RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(500))) + '''''', '' AS PIVOT
FROM ' + @TABLA + ' WHERE ' + @PIVOT + ' IS NOT NULL' EXECUTE (@STRG) /*

--el sql dinámico de más arriba genera un script similar a éste,
-- (cambia según los parámetros que se ingresen)

INSERT INTO #PIVOT
SELECT DISTINCT 'AVG(CASE WHEN campo_pivote=''' + RTRIM(CAST(campo_pivote AS VARCHAR(500)))
+ ''' THEN precio ELSE 0 END) AS ''' +
RTRIM(CAST(campo_pivote AS VARCHAR(500))) + ''',' AS PIVOT
FROM tu_tabla WHERE campo_pivote IS NOT NULL

--Con el cual se obtienen los valores de los registros que queremos que se conviertan en campos de nuestra nueva tabla.

--A continuación generamos la consulta final, donde seleccionamos las columnas según la tabla #PIVOT y realizamos la agrupación correspondiente.

*/

SET @SQL ='SELECT '
SELECT @SQL= @SQL + RTRIM(convert(varchar(500), pivot))
FROM #PIVOT ORDER BY PIVOT
IF @AGRUPACION<>'*'
BEGIN
SET @SQL=@SQL + @AGRUPACION + ' FROM ' + @TABLA + ' GROUP BY ' + @AGRUPACION
END
ELSE
BEGIN
SET @SQL=@SQL + '''TODOS'' AS T FROM ' + @TABLA
END

/* Ejecutamos la consulta, si quieres ver como queda, cambia el: EXECUTE(@SQL) por PRINT(@SQL) */

EXECUTE (@SQL)

/* OJO: Si la consulta resultante en @SQL tiene más de 8000 caracteres el script dará un error ya que el sql no quedará completo :( . */

-- FIN DE SP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir filas a columnas

Publicado por JAMS (93 intervenciones) el 01/03/2011 22:44:25
Puedes usar PIVOT

prueba este ejemplo

declare @tabla table (nombre varchar(100),fecha datetime,entrada decimal (8,2))


insert into @tabla values('Juan Perez','01-01-2008','8.00')
insert into @tabla values('Juan Perez','01-02-2008','8.15')
insert into @tabla values('Juan Perez','01-03-2008','8.20')
insert into @tabla values('Karina Torrez','01-01-2008','8.03')
insert into @tabla values('Karina Torrez','01-02-2008','8.07')
insert into @tabla values('Karina Torrez','01-03-2008','8.19')

--select * from @tabla

select nombre,[01-01-2008],[01-02-2008],[01-03-2008]
from
(SELECT nombre,fecha,entrada
FROM @tabla) AS TableToBePivoted
PIVOT
(
sum(entrada)
FOR fecha IN ([01-01-2008], [01-02-2008], [01-03-2008])
) AS PivotedTable;

Saludos y mucha suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar