zoukankan      html  css  js  c++  java
  • SQL行列转换,PIVOT与UNPIVOT的区别和使用方法举例

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求。

    在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。

    PIVOT是行转列,用法如下:
    假如表结构如下:
          id  name quarter  profile
          1     a        1         1000
          1     a        2         2000
          1     a        3         4000
          1     a        4         5000
          2     b        1         3000
          2     b        2         3500
          2     b        3         4200
          2     b        4         5500
      ----------------------------------------------
         使用PIVOT将四个季度的利润转换成横向显示:
           select id,name,
                 [1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"
                 from test
                 pivot
                 (
                   sum(profile)
                   for quarter in ([1],[2],[3],[4])
                 )
                 as pvt

     -----------------------------------------------
     得出的结果如下:
        id  name   一季度  二季度  三季度  四季度
        1     a         1000    2000     4000     5000
        2     b         3000    3500     4200     5500
                    

    ========================================================================================


    UNPIVOT是列转行,用法如下:
    假如表结构如下:
        id   name    Q1        Q2       Q3        Q4                  
        1      a       1000    2000    4000     5000
        2      b       3000    3500    4200     5500
     -----------------------------------------------
        使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
           select id,name,quarter,profile
               from test
               unpivot
               (
                  profile
                  for quarter in ([Q1],[Q2],[Q3],[Q4])
               )
               as unpvt


     -----------------------------------------------
     得出的结果如下:
        id   name   quarter    profile
        1       a         Q1        1000
        1       a         Q2        2000
        1       a         Q3        4000
        1       a         Q4        5000
        2       b         Q1        3000
        2       b         Q2        3500
        2       b         Q3        4200
        2       b         Q4        5500

  • 相关阅读:
    微软官方中英文Office2010SP1直接下载地址
    开源协议GUN LGPL
    VS2008安装失败!Microsoft Visual Studio Web 创作组件
    新的类型转换操作符(Type Conversion Operators)
    开源协议GNU GPL
    Visual Studio Ultimate 2012 RC 英文版
    两种老公,两种人生。
    开源协议Apache Licence 2.0
    VS2010 关于 CVT1100 和 LNK1123 的解决办法
    Apache Flink Streaming(DataStream API)
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2452758.html
Copyright © 2011-2022 走看看