2012-06-08 29 views
6

Tengo una tabla con columnas decir col1, col2, col3. La tabla tiene muchas filas.¿Cómo convertir un encabezado de columna y su valor en una fila en sql?

Supongamos val1, val2, val3 es una de esas filas. Quiero obtener el resultado como

Col1, Val1 
Col2, Val2 
Col3, Val3 

Eso es 3 filas, una para cada columna y su valor.

Estoy usando SQL Server 2008. Leí acerca de los pivots. ¿Los pivotes son una forma de resolver este problema? ¿Puede alguien dirigirme a algunos ejemplos o soluciones para resolver este problema?

Muchas gracias

Respuesta

5

Tal vez algo como esto:

Los datos de prueba

DECLARE @T TABLE(Col1 INT, Col2 INT, Col3 INT) 
INSERT INTO @T 
VALUES (1,1,1) 

consulta

SELECT 
    * 
FROM 
(
    SELECT 
     t.Col1, 
     t.Col2, 
     t.Col3 
    FROM 
     @T AS t 
) AS SourceTable 
UNPIVOT 
(
    Value FOR Col IN 
    (Col1,Col2,Col3) 
) AS unpvt 

salida

1 Col1 
1 Col2 
1 Col3 
+0

Muchas gracias, Arion. Esto es lo que estaba buscando exactamente. – Vinoth

+0

No hay problema ... Me alegra ayudar :) – Arion

2

Para hacer este tipo de cosas atentamente lo siguiente: Using PIVOT and UNPIVOT

función Pivot permite convertir valores de fila a partir de la columna ..

También puedes ver: Dynamic Pivoting in SQL Server

Ejemplo:

create table #temptable(colorname varchar(25),Hexa varchar(7),rgb varchar(1), rgbvalue tinyint)  
GO 
insert into #temptable values('Violet','#8B00FF','r',139); 
insert into #temptable values('Violet','#8B00FF','g',0); 
insert into #temptable values('Violet','#8B00FF','b',255); 
insert into #temptable values('Indigo','#4B0082','r',75); 
insert into #temptable values('Indigo','#4B0082','g',0); 
insert into #temptable values('Indigo','#4B0082','b',130); 
insert into #temptable values('Blue','#0000FF','r',0); 
insert into #temptable values('Blue','#0000FF','g',0); 
insert into #temptable values('Blue','#0000FF','b',255); 



SELECT colorname,hexa,[r], [g], [b] 
FROM 
(SELECT colorname,hexa,rgb,rgbvalue 
    FROM #temptable) AS TableToBePivoted 
PIVOT 
( 
sum(rgbvalue) 
FOR rgb IN ([r], [g], [b]) 
) AS PivotedTable; 
+0

gracias Pranay realmente ayuda. – Vinoth

0

Crear una tabla temproary:

CREATE TABLE #table2 
(
name NCHAR, 
bonus INT 
) 

ahora Seleccione y ejecute la sentencia a continuación si hay un vacío.

SELECT * FROM #table2 

INSERT INTO #table2 (name,bonus) VALUES ('A',10) 
INSERT INTO #table2 (name,bonus) VALUES ('B',20) 
INSERT INTO #table2 (name,bonus) VALUES ('C',30) 

Después de insertar los valores en la tabla. seleccionar y ejecutar la línea de abajo si se obtiene registros:

SELECT * FROM #table2 

de entrada:

name bonus 
A 10 
B 20 
C 30 

cambiar la entrada en como este resultado

Resultado:

Cost  A B C 
Bonus 10 20 30 

Al utilizar este código:

SELECT 'Bonus' AS Cost, 
[A],[B],[C] 
FROM 
(SELECT name, Bonus 
FROM #table2) AS TempTbl 
PIVOT 
(
    AVG(bonus) 
    FOR [name] IN ([A],[B],[C]) 
) AS PivotTable; 
Cuestiones relacionadas