返回顶部

收藏

在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. 米豆网 - 1000seo 发表 2012-08-31 15:03:07 新一代数据库的五大标准
  2. 博主 发表 2013-05-13 09:54:49 Ruby访问SQL Server数据库的简单配置
  3. Panni_007 发表 2013-06-15 02:59:56 Sqli-Labs专业SQL注入测试平台下载
  4. itcodes 发表 2013-07-08 15:28:12 Sql Server 给表与字段添加描述
  5. enjoyasp.net 发表 2013-08-20 03:30:20 配置job管理权限
  6. enjoyasp.net 发表 2013-11-18 04:00:03 按月统计数据
  7. enjoyasp.net 发表 2013-12-16 05:34:23 增加新列赋值问题
  8. enjoyasp.net 发表 2014-04-26 07:28:43 自动安装sqlserver2012及补丁
  9. 发表 2014-06-13 13:42:30 复杂查询(上):多表连接技术
  10. 发表 2014-07-04 11:54:55 ORACLE分层查询start with&connect by
  11. 发表 2014-09-01 07:41:31 sql2008备份作业无法正常执行
  12. 半天河 发表 2014-08-22 01:04:44 SQLAlchemy的SQL引擎学习笔记

发表评论