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 

                 

                  绑定顶一下呗

  • 相关阅读:
    java多线程学习-java.util.concurrent详解(四) Exchanger
    java多线程学习-java.util.concurrent详解(三) Semaphore
    java多线程学习-java.util.concurrent详解(二) CyclicBarrier
    java多线程学习-java.util.concurrent详解(一) CountDownLatch
    MongoDB 入门学习
    Protrator自动化测试(针对Angular 应用的自动化测试)
    Jasmine 编写 JavaScript 测试用例
    记录一下mysql忘记密码重置
    System.Data.DbType的字符串和数据库中字符串类型对应关系
    memcached和mongodb 在windows下安装
  • 原文地址:https://www.cnblogs.com/ssol/p/2680569.html
Copyright © 2011-2022 走看看