如何在SQL中将列标题及其值转换为行?

7

我有一个表格,其中包含列col1,col2,col3。该表格中有许多行。

假设val1,val2,val3是其中一行。我想要的结果是:

Col1, Val1
Col2, Val2
Col3, Val3

这是三行数据 - 每一列及其值都有一行。

我正在使用 SQL Server 2008。我了解了一些关于数据透视表的知识。数据透视表是否可以解决这个问题?能否给我提供一些示例或解决方案来解决这个问题?

非常感谢。

3个回答

6
也许是这样的:

测试数据

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

查询

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

输出

1   Col1
1   Col2
1   Col3

非常感谢你,Arion。这正是我正在寻找的内容。 - Vinoth

2
要完成这种事情,请阅读以下内容:使用PIVOT和UNPIVOT Pivot函数允许您将行值转换为列。
还请查看:SQL Server中的动态透视表 示例:
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
创建一个临时表:
CREATE TABLE #table2
(
name NCHAR,
bonus INT
)

如果为空,则选择并执行下面的语句。

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)

在将值插入表中后,如果您获取到记录,请选择并执行以下行:

SELECT * FROM #table2

输入:

name    bonus
A   10
B   20
C   30

将输入更改为如下结果

结果:

Cost        A    B  C
Bonus   10  20  30

通过使用此代码:

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接