UNPIVOT
UNPIVOT则相反,把数据从列旋转到行
SELECT *
INTO product_vlues
FROM ( SELECT NAME ,
YEAR(shijian) AS shijian ,
jiage
FROM dbo.product
) AS ov PIVOT ( SUM(ov.jiage) FOR ov.shijian IN ( [2005], [2006],
[2008] ) )AS p
SELECT * FROM product_vlues
-------------------结果----------------
-----查询视图用UNPIVOT----------------------------
SELECT * FROM product_vlues UNPIVOT(jiange FOR shijian IN ( [2005], [2006],
[2008] )) AS u
-----结果----------------------------------------------
---------步骤分析---------------------------------------
UNPIVOT涉及三个逻辑处理阶段
1.U1:生成副本
2.U2:提取元素
3.U3:删除带有NULL的行
UNPIVOT输入是左表表达式。
第一步先为左表表达式中的行生成多个副本。要进行逆透视转换的每一列(在UNPIVOT运算符的In子句中出现的列名)都会生成一个副本。
第二步从来源列中提出与行的当前副本所代表的逆透视转换元素相对应的值。保存的目标名称是FOR子句之前的指定的(本例中为Jiage)。这个目标列将保存虚拟表中与当前行的销售年份相对应的列值。
第三步将删除掉结果值为NULL的行,返回虚拟表。
Copyright © 2017 程英暾. All Rights Reserved.