• 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

  • 相关阅读:
    学习的原动力
    “六顶思考帽”给我的启示
    关于DataSet与Strongly typed DataSet几点思考(原创)
    设计模式之Singleton和Factory
    CentOS修改网络配置
    Proxmox VE(PVE)安装教程
    CentOS开启SELinux导致samba无法访问的解决办法
    nano编辑器使用教程
    CentOS 如何挂载硬盘
    PVE硬盘直通
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2452758.html
Copyright © 2020-2023  润新知