zoukankan      html  css  js  c++  java
  • PIVOT内置函数实现行转列

      PIVOT用于将列值旋转为列名(即行转列),PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P

    完整语法:

    table_source

    PIVOT(

    聚合函数(value_column)

    FOR pivot_column

    IN(<column_list>)

    )

      UNPIVOT用于将列明转为列值(即列转行),可以用UNION来实现

    完整语法:

    table_source

    UNPIVOT(

    value_column

    FOR pivot_column

    IN(<column_list>)

    )

    案例:

    姓名         课程         分数
    ---------- ---------- -----------
    张三         语文         74
    张三         数学         83
    张三         物理         93
    李四         语文         74
    李四         数学         84
    李四         物理         94

    根据姓名统计这个人的三门成绩,即:姓名   语文   数学  物理

    首先看看使用case when end结构的时候:

    select 姓名,
     max(case 课程 when '语文' then 分数 else 0 end)语文,
     max(case 课程 when '数学'then 分数 else 0 end)数学,
     max(case 课程 when '物理'then 分数 else 0 end)物理
    from tb
    group by 姓名

    --------------------------------结果------------------------------------------------------------------------------------

    姓名         语文          数学          物理
    ---------- ----------- ----------- -----------
    李四         74          84          94
    张三         74          83          93

    这个结果就是我们想要的,然后再看看使用pivot:

    select * from tb pivot(max(分数) for 课程 in (语文,数学,物理))a

    --------------------------------结果------------------------------------------------------------------------------------

    姓名         语文          数学          物理
    ---------- ----------- ----------- -----------
    李四         74          84          94
    张三         74          83          93

  • 相关阅读:
    CODEVS4650 破损的键盘
    洛谷P1656 炸铁路
    洛谷 P3225 [HNOI2012]矿场搭建
    1265 四点共面
    1406: [AHOI2007]密码箱
    1193: [HNOI2006]马步距离
    1800: [Ahoi2009]fly 飞行棋
    1923: [Sdoi2010]外星千足虫
    I
    2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11242766.html
Copyright © 2011-2022 走看看