mysql中的行转列
发布日期:2021-05-08 20:43:10 浏览次数:17 分类:精选文章

本文共 1683 字,大约阅读时间需要 5 分钟。

行转列:通过CASE WHEN实现数据转换

在数据处理中,行转列是一项常见的需求,通常通过CASE WHEN语句来实现。以下是关于行转列的详细说明。

学生成绩表的例子

为了更好地理解行转列,我们先来看一个典型的例子:学生成绩表。

数据结构

CREATE TABLE [StudentScores](    [UserName] NVARCHAR(20), -- 学生姓名    [Subject] NVARCHAR(30), -- 科目    [Score] FLOAT -- 成绩)

数据插入

INSERT INTO [StudentScores]SELECT 'Nick', '语文', 80INSERT INTO [StudentScores]SELECT 'Nick', '数学', 90INSERT INTO [StudentScores]SELECT 'Nick', '英语', 70INSERT INTO [StudentScores]SELECT 'Nick', '生物', 85INSERT INTO [StudentScores]SELECT 'Kent', '语文', 80INSERT INTO [StudentScores]SELECT 'Kent', '数学', 90INSERT INTO [StudentScores]SELECT 'Kent', '英语', 70INSERT INTO [StudentScores]SELECT 'Kent', '生物', 85

转换需求

我们希望将每位学生的成绩从多行转换为单行,便于查看和统计。

SQL查询

SELECT     UserName,    MAX(CASE Subject WHEN '语文' THEN Score ELSE 0 END) AS '语文',    MAX(CASE Subject WHEN '数学' THEN Score ELSE 0 END) AS '数学',    MAX(CASE Subject WHEN '英语' THEN Score ELSE 0 END) AS '英语',    MAX(CASE Subject WHEN '生物' THEN Score ELSE 0 END) AS '生物'FROM dbo.[StudentScores]GROUP BY UserName

查询结果

通过上述查询,我们可以清晰地看到每位学生的所有成绩。

MySQL的实现思路

在MySQL中,行转列的思路与SQL Server类似,主要是通过多次CASE WHEN判断,将多行数据转换为单列。

核心原理

  • CASE WHEN语句:用于对每一行数据进行判断,返回指定的值或0。
  • MAX函数:用于聚合多个值,确保每个科目只显示一次最大的成绩。
  • 示例:将时间数据转行

    原始数据

    | 时间 | 值 ||------|-----|| A    | 10  || B    | 20  || C    | 30  |

    转换后

    | 时间 | 值 ||------|-----|| A    | 10  || B    | 20  || C    | 30  |

    SQL查询

    SELECT     MAX(CASE WHEN `时间` = 'A' THEN `值` ELSE 0 END) AS `A`,    MAX(CASE WHEN `时间` = 'B' THEN `值` ELSE 0 END) AS `B`,    MAX(CASE WHEN `时间` = 'C' THEN `值` ELSE 0 END) AS `C`FROM 表名GROUP BY `时间`

    最终结果

    时间 A值 B值 C值
    A 10 0 0
    B 0 20 0
    C 0 0 30

    常见问题

  • 值为空的问题:在查询结果中,某些科目可能显示为0,这表示该学生在该科目没有成绩。
  • 排序问题:在转换后,数据可能需要重新排序,确保信息易于阅读。
  • 通过以上方法,我们可以灵活地将行转列,满足不同的数据处理需求。

    上一篇:html之flex伸缩盒子
    下一篇:java从数据库读取表结构生成实体类

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年05月08日 05时58分16秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章