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

  • 相关阅读:
    事务/数据库操作之事务,开启回滚提交
    python连接数据库、cursor fetch语句处理
    order by 排序输出、插入
    表的查询,
    android权限大全
    uniapp ios端证书打包+开发环境
    uniapp在app端白屏报错
    数字递增动画js插件-countUp.js
    窗口滚动时,判断元素与视野的关系-js代码
    Linux安装Nginx并配置站点
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2452758.html
Copyright © 2011-2022 走看看