返回顶部

收藏

在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

相关聚客文章
  1. 博主 发表 2013-03-14 07:40:28 Lingual - a SQL DSL for Hadoop From Concurrent
  2. 新一 发表 2013-05-23 11:05:15 mysql查询区分大小sql语句
  3. 新一 发表 2013-06-27 00:11:46 mysql自联结
  4. 博主 发表 2013-08-15 05:33:20 SQL Server优化50法
  5. 博主 发表 2013-08-29 13:17:00 Faceted Search with MongoDB
  6. enjoyasp.net 发表 2013-11-23 06:20:31 [Except]How to compare the rows of two tables and
  7. 在路上 发表 2013-12-27 10:00:31 安装SQL Server 2005提示无法找到Microsoft SQL Server Native
  8. xiaoyu 发表 2014-05-15 09:33:00 子查询无法展开的模拟和几个案例
  9. 发表 2014-06-22 14:23:00 索引
  10. 博主 发表 2014-07-18 07:11:00 在使用play framework的evolutions?需要支持SQL Server?用Liqui
  11. 发表 2014-09-03 07:31:41 SQL2008对数据库创建只读用户
  12. 马齿苋 发表 2010-04-29 09:46:57 深度对比Oracle与SQL Server – 第三部分

发表评论