码迷,mamicode.com
首页 > 其他好文 > 详细

逆透视转换

时间:2014-05-27 02:30:16      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:c   a   使用   数据   os      

逆透视转换(unpivoting)是一种把数据从列的状态旋转为行的状态的技术。通常,它涉及查询数据的透视状态,将来自单个记录中多个列的值扩展为单个列中具有相同值的多个记录。换句话说,把透视表中的每个源行潜在地转换成多个行,每行代表源透视表的一个指定的列值。

使用标准SQL 进行逆透视转换

逆透视转换的标准要SQL解决方案非常明确地要实现3个逻辑处理阶段:生成副本、提取元素和删除不相关的交叉。

解决方案的第一步是根据来源表的每一行生成多个副本(为需要逆透视的每个列生成一个副本)。

SELECT *

FROM (SELECT empid,custid,

    CASE custid

      WHEN ‘A‘ THEN A

      WHEN ‘B‘ THEN B

    END AS qty

  FROM dbo.EmpCustOrders

    CROSS JOIN (VALUES(‘A‘),(‘B‘)) AS Custs(custid) AS D

WHERE qty IS NOT NULL ;

使用 T-SQL 的UNPIVOT 运算符进行逆透视转换

对数据进行逆透视转换时,会为源表中想要进行逆透视的任意列生成两个结果列。

与PIVOT 运算符类似。UNPIVOT 也是作为表运算符,在FROM 子句的上下文中执行操作。它的操作对象是源表或表表达式。在UNPIVOT去处符的圆括号中需要指定的内容包括:用于保存源表列值的目标列名,以及源表的列名列表。在UNPIVOT 运算符的圆括号的后面,可以为表运算符的结果表提供一个别名。\

select col1,col2,col3
from (
select ‘a‘ as col1,‘2‘ as b,‘3‘ as c ) as t
unpivot (col3 for col2 in (b,c)) as unp

注意:UNPIVOT 运算符会执行与前面介绍的逻辑处理阶段相同的几个步骤:生成副本、提取元素和删除交叉位置上的NULL值。与基于标准SQL 的解决方案相比,UNPIVOT 的最后一个阶段是不可选的。

还要注意,对经过透视转换所得的表再进行逆透视转换,并不能得到原来的表。因为逆透视转换只是把经过透视转换后的值再旋转到另一种新的格式。但是,经过逆透视转换后的表可以再通过透视转换回到原来的状态。换句话说,透视转换中的聚合操作会丢失掉源表中的详细信息。经过透视转换后,保存下来的只是操作之间的所有聚合结果,而逆透视转换则不会丢失任何信息。

逆透视转换,布布扣,bubuko.com

逆透视转换

标签:c   a   使用   数据   os      

原文地址:http://www.cnblogs.com/zhangdx/p/3736006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!