• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL行转列、列转行的简单实现

    前言

    行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。

    行列转换就是如下图所示两种展示形式的互相转换

    行转列

    假如我们有下表:

    SELECT *
    FROM student
    PIVOT (
     SUM(score) FOR subject IN (语文, 数学, 英语)
    )

    通过上面 SQL 语句即可得到下面的结果

    PIVOT 后跟一个聚合函数来拿到结果,FOR 后面跟的科目是我们要转换的列,这样的话科目中的语文、数学、英语就就被转换为列。IN 后面跟的就是具体的科目值。

    当然我们也可以用 CASE WHEN 得到同样的结果,就是写起来麻烦一点。

    SELECT name,
     MAX(
     CASE
     WHEN subject='语文'
     THEN score
     ELSE 0
     END) AS "语文",
     MAX(
     CASE
     WHEN subject='数学'
     THEN score
     ELSE 0
     END) AS "数学",
     MAX(
     CASE
     WHEN subject='英语'
     THEN score
     ELSE 0
     END) AS "英语"
    FROM student
    GROUP BY name

    使用 CASE WHEN 可以得到和 PIVOT 同样的结果,没有 PIVOT 简单直观。

    列转行

    假设我们有下表 student1

    SELECT *
    FROM student1
    UNPIVOT (
      score FOR subject IN ("语文","数学","英语")
    )

    通过 UNPIVOT 即可得到如下结果:

    我们也可以使用下面方法得到同样结果

    SELECT
      NAME,
      '语文' AS subject ,
      MAX("语文") AS score
    FROM student1 GROUP BY NAME
    UNION
    SELECT
      NAME,
      '数学' AS subject ,
      MAX("数学") AS score
    FROM student1 GROUP BY NAME
    UNION
    SELECT
      NAME,
      '英语' AS subject ,
      MAX("英语") AS score
    FROM student1 GROUP BY NAME

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • mysql 行转列和列转行实例详解
    • mysql 列转行,合并字段的方法(必看)
    • mssql 数据库表行转列,列转行终极方案
    • SQL行转列和列转行代码详解
    • mysql 列转行的技巧(分享)
    • mysql列转行以及年月分组实例
    • SQL知识点之列转行Unpivot函数
    上一篇:SQL语句优化的一些必会指南
    下一篇:建立在Tablestore的Wifi设备监管系统架构实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL行转列、列转行的简单实现 SQL,行转列,列转,行的,简单,