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

  • 相关阅读:
    X 如何在mysql客户端即mysql提示符下执行操作系统命令
    X MySQL UNDO表空间独立和截断 ,mysql undo 的历史
    X Mysql5.7忘记root密码及mysql5.7修改root密码的方法
    X mysql密码的安全策略ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    二分法查找
    elasticsearch API
    logstash的基础
    elasticsearch的基础
    Linux的进程管理
    Linux的网卡配置
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2452758.html
Copyright © 2011-2022 走看看