我有一个列的表说col1, col2, col3
。该表中有许多行。
让我们假设val1, val2, val3
是这样的一行。我想得到结果
Col1, Val1
Col2, Val2
Col3, Val3
那是 3 行 - 每列一个及其值。
我正在使用 SQL Server 2008。我阅读了有关枢轴的信息。枢轴是解决这个问题的方法吗?有人可以向我介绍一些如何解决此问题的示例或解决方案吗?
非常感谢
我有一个列的表说col1, col2, col3
。该表中有许多行。
让我们假设val1, val2, val3
是这样的一行。我想得到结果
Col1, Val1
Col2, Val2
Col3, Val3
那是 3 行 - 每列一个及其值。
我正在使用 SQL Server 2008。我阅读了有关枢轴的信息。枢轴是解决这个问题的方法吗?有人可以向我介绍一些如何解决此问题的示例或解决方案吗?
非常感谢
也许是这样的:
测试数据
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
要执行此类操作,请阅读以下内容:使用 PIVOT 和 UNPIVOT
枢轴功能允许您从列中转换行值..
另请检查: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;
创建临时表:
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;