UNPIVOT

 
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.