zoukankan      html  css  js  c++  java
  • "PIVOT 和 UNPIVOT"函数

         做报表的时候,大多都会遇到“数据透视”,也就是“行列转换”。这些操作都会用到 "PIVOT 和 UNPIVOT"函数。

         根据“MSDN”的讲解,参考地址(http://technet.microsoft.com/zh-cn/library/ms177410.aspx ),但是不是太好理解,下面根据自己的理解介绍下。有不当的地方还请大师们多多指正。

         MSDN实例:

                 select * from  

                              (select  DaysToManufacture,StandardCost  from   Production.Product)  as  tablesource

                              pivot  

                              (sum(StandardCost)  for DaysToManufacture in ([0],[1],[2],[3],[4]))

                              as newtable 

         1、“源数据查询”: select  DaysToManufacture,StandardCost  from   Production.Product

               简单理解就是“Pivot”要操作的数据集

         2、 “pivot ”函数:(sum(StandardCost)  for DaysToManufacture in ([0],[1],[2],[3],[4]))

                根据“StandardCost ”(源数据列)对“DaysToManufacture ” 进行透视,透视后的列为“[0],[1],[2],[3],[4] ”。

         3、查询透视后的新的结果集:select  *   from   .......   newtable 

          注意:“透视数据”自动根据“非透视列”进行分组,比如下面的表。

           

          根据“SumQty”对“DAhour”列进行透视,这时您会发现“DAHour”中存在重复的“13、14、15、16”等,但是它们的“BuildingNo”是不同的,这时就会自动按照“BuildingNo”进行分组,从而变为不同的记录(不然只有一条记录)。“DAHour”的值变为了列的标题,而SumQty中的值则变为了“DAHour”列对应的值。

            SQL语句如下:

            select * from  (select BuildingNo,DAHour,SumQty  from  EnergyDataSum  ed    where   buildingno  in  ('310000Fa001','310000Fe001')  ) as  pt
           pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt  

            

           “UNPivot”函数

            顾名思义,这是 “pivot ”函数的逆运算。

            MSDN中的实例如下:

              1 CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,

     2     Emp3 int, Emp4 int, Emp5 int);
     3 GO
     4 INSERT INTO pvt VALUES (1,4,3,5,4,4);
     5 INSERT INTO pvt VALUES (2,4,1,5,5,5);
     6 INSERT INTO pvt VALUES (3,4,3,5,4,4);
     7 INSERT INTO pvt VALUES (4,4,2,5,5,4);
     8 INSERT INTO pvt VALUES (5,5,1,5,5,5);
     9 
    10 go
    11 select *  from  pvt
    12 go
    13 
    14 
    15 SELECT VendorID, Employees, Orderbs
    16 FROM 
    17    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
    18    FROM pvt) p
    19 UNPIVOT
    20    (Orderbs FOR Employees IN 
    21       (Emp1, Emp2, Emp3, Emp4, Emp5)
    22 )AS unpvt;

           

           唯一不同的地方就是函数的名字(废话),“UNPIVOT ”(数据源列   for  标题列  in (标题) )

           有什么不对的地方还请多多指正。 

           

           另外,多说一点,关于“SQLServer2008”评估版的升级问题。

            1、如果新安装 “SQLServer2008”评估版,请在安装时输入序列号。

                 开发版: PTTFM-X467G-P7RH2-3Q6CG-4DMYB
             企业版: JD8Y6-HQG69-P9H84-XDTPG-34MBB 
            2、已经安装 “SQLServer2008”评估版,而且过了评估期了,请如下操作。

                  2.1修改注册表:
                   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\ConfigurationState里的“CommonFiles”值改成3 

                  2.2 点击【开始】—【所有程序】—【Microsoft SQL Server 2008】—【配置工具】—{SQL Server 安装中心}

                  2.3 点击左侧的【维护】,在点击右侧的【版本升级】,接着按照提示一直点下一步,到产品密钥的时候输入
                  开发版: PTTFM-X467G-P7RH2-3Q6CG-4DMYB
                  企业版: JD8Y6-HQG69-P9H84-XDTPG-34MBB 

                 

                  绑定顶一下呗

  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/ssol/p/2680569.html
Copyright © 2011-2022 走看看