返回顶部

收藏

在sql server 2005中使用UNPIVOT将列转换成行

更多

在sql server 2000里面做行列转换时非常困难的。 sql server 2005提供了PIVOTUNPIVOT来做行列转换。

下面的例子使用UNPIVOT将列转换为行。

表结构及数据初始化脚本如下:

create table #temptable(rowid int,colorname varchar(25),Hexa varchar(7)  
,R tinyint,G tinyint,B tinyint)   
GO  
insert into #temptable values(1,'Violet','#8B00FF',139,0,255);  
insert into #temptable values(2,'Indigo','#4B0082',75,0,130);  
insert into #temptable values(3,'Blue','#0000FF',0,0,255);  
insert into #temptable values(4,'Green','#00FF00',0,255,0);  
insert into #temptable values(5,'Yellow','#FFFF00',255,255,0);  
insert into #temptable values(6,'Orange','#FFA500',255,165,0);  
insert into #temptable values(7,'Red','#FF0000',255,0,0);  
GO  
select * from #temptable  
GO  

unpivot

表中定义了R,G,B三列,分别表示三色值。我们要把R,G和B转换到行,也就是现在的一行要根据R,G,B三列转换成三行。

如下sql语句:

SELECT rowid,colorname,hexa,rgb,rgbvalue  
    FROM   
       (SELECT rowid,colorname,hexa,r,g,b  
                FROM #temptable) p  
        UNPIVOT  
       (rgbvalue FOR rgb IN (r,g,b))  
    AS unpvt;  

上面的sql输出:

unpivot

在上面的例子中,rowid,colorname,hexa列的值都保持不变,R,G,B三列的值被转到行上。

UNPIVOT语法如下:

select [<<unchanged columns>>],<<new column>>,<<new column for its values>>  
from   
(  
    select [<<unchanged columns>>],<<columns to be converted to rows>>  from <<tablename>>  
) <<alias name1>>  
UNPIVOT   
(  
    <<new column for its values>> FOR   
    <<new column>> IN (<<columns to be converted to rows>>)  
)  
AS <<alias name2>>  

标签:sql,sql-server,UNPIVOT

收藏

0人收藏

支持

1

反对

0

发表评论