zoukankan      html  css  js  c++  java
  • SQL的行列转换

    【一】行转列

    1,查询原始的数据

    /***这次练习的主题,行转列,列转行***/
    select * from Scores

    2,得到姓名,通过group by

    select Student as '姓名'
    from Scores
    group by Student
    order by Student

    3,再加上max, case……when

    复制代码
    复制代码
    select Student as '姓名',
    max(case Subject when '语文' then Score else 0 end) as '语文' ,--如果这个行是“语文”,就选此行作为列
    max(case Subject when '英语' then Score else 0 end ) as '英语'
    from Scores
    group by Student
    order by Student
    复制代码
    复制代码

    查看其它资料时,看到另外一种方法,用pivot

    复制代码
    复制代码
    --group by, avg/max, pivot。这里用max和avg,结果都一样,有什么区别吗?有点不明白
    --参考网上的资料,用法如下
    /*
    pivot(
      聚合函数(要转成列值的列名)
      for 要转换的列
      in(目标列名)
      )
    */
    select Student as '姓名',
    avg(语文) as '语文',
    avg(英语) as '英语'
    from Scores
    pivot(
    avg(Score) for Subject
    in (语文,英语)
    )as NewScores
    group by Student
    order by Student asc
    复制代码
    复制代码
  • 相关阅读:
    字符串练习题
    算法题
    readLine()
    grep家族
    java_IO
    集合框架
    常用类
    异常
    Mysql 图形工具 Navicat
    Mysql内置功能《一》流程控制
  • 原文地址:https://www.cnblogs.com/zhuxu/p/5200657.html
Copyright © 2011-2022 走看看