简单的数据库表行列转换实例

原表如下:

列转行:

select 姓名,
  MAX(CASE 课程 when ‘语文‘ then 分数 else 0 END) 语文,
  MAX(CASE 课程 when ‘数学‘ then 分数 else 0 END) 数学,
  MAX(CASE 课程 when ‘物理‘ then 分数 else 0 END) 物理
from 成绩
GROUP BY 姓名

得到如下结果:

反过来,行转列:

select * from (
  select 姓名,‘语文‘ 课程, 语文 分数 from 成绩2 UNION
  select 姓名,‘数学‘ 课程, 数学 分数 from 成绩2 UNION
  select 姓名,‘物理‘ 课程, 物理 分数 from 成绩2 ) t
ORDER BY 姓名,case 课程 when ‘语文‘ then 1 when ‘数学‘ then 2 when ‘物理‘ then 3 end

时间: 2024-08-24 17:55:14

简单的数据库表行列转换实例的相关文章

通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create table s( [name] nvarchar(50), book nvarchar(50), saledNumber int ) ----插入测试数据 insert into s ([name],book,saledNumber) values('小王','java从入门到精通',10); inser

数据库的行列转换问题

在平常的工作中或者面试中,我们可能有遇到过数据库的行列转换问题.今天我们就来讨论下. 1.创建表 首先我们来创建一张表. sql语句: --1. 创建数据表 if OBJECT_ID('Score') is not null drop table Score create table Score ( 姓名 nvarchar(128), 课程 nvarchar(128), 分数 int ) insert into Score values('张三','语文',98) insert into Sco

数据库类似行列转换SQL

1.原表test结构如下: 2.我们想要得到的结果为: 3.第一种方法:静态方法,即列固定 SQL如下: select * from  ( SELECT date,name,sum(num) num FROM test  GROUP BY date,name ) t pivot ( sum(num) for t.name in ([alan],[andy],[baicl])) as a 4.第二种方法:动态方法,即列为通过SQL查询获取 SQL如下: declare @sql nvarchar(

锋利的SQL-SQL Server的表旋转(行列转换)

所谓表旋转,就是将表的行转换为列,或是将表的列转换为行,这是从SQL Server 2005开始提供的新技术.因此,如果希望使用此功能,需要将数据库的兼容级别设置为90.表旋转在某些方面也是解决了表的数据存储和实际需要之间的矛盾.例如,图9-4所示的是一个典型的产品销售统计表,这种格式虽然便于阅读,但是在进行数据表存储的时候却并不容易管理,产品销售数据表通常需要设计成图9-5所示的结构.这样就带来一个问题,用户既希望数据容易管理,又希望能够生成一种能够容易阅读的表格数据,这时候就可以使用表旋转技

在线数据库表(sql语句)生成java实体类工具 - 参考手册

SQL建表语句 说明 格式良好的SQL建表语句,可以是直接从PowerDesigner.Navicat等工具中导出SQL建表语句.所谓格式良好,是指建表指令与表名必须在一行,字段名称.类型.注释必须在一行,因为这个工具是用正则实现的,并不是语法解析器,当然,以后有时间的话,会改进成解析器. 举例 -- ---------------------------- -- Table structure for t_activity -- ---------------------------- DRO

【峰回路转】Excel技巧百例 11.数据透视表的简单使用-行列转换

Excel的数据透视表不仅可以进行分类汇总,而且可以轻松快捷的进行行列转换 例如: 按照上篇文章中的方法我们可以插入数据透视表,将姓名放到行中,将课程放到列中,将分数放到值中: 从上面的结果中,我们可以清晰的看到有人缺考了英语 如果只显示姓名有重名的怎么办?是否可以把学号也显示出来呢?我们下一篇将介绍如何既显示学号,又显示姓名. 版权声明:本文为博主原创文章,未经博主允许不得转载.

Sql的行列(纵横表)转换

创建表scores 一.传统的行列转换 纵表转横表 我们要转成的横表是这样子的: 既然这个表只有两列,那么可以根据姓名进行分组.先把姓名拼凑出来,后面的分数我们再想办法. select 姓名 from scores group by 姓名 结果: 分析: 我们先拿到语文这个科目的分数.既然我们用到了group by 语句,这里肯定要用聚合函数来求分数. 而且我们只需要语文这一科的成绩,分组出来的 一共有 3列 ,分别是 语文.数学.物理  .  那么就需要判断科目来取分数. 这里符合我们需求的

简单的叙述下SQL中行列转换的小知识!

行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧.这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理, 但是不要太执着于这些细节,能说明问题就好,傻笑ing..... 1 列转行:按照某一列分组,将另一列作为行时列名可数,不变. 什么意思呢?话说多了反而不懂,放两张图

ABAP 内表的行列转换-发货通知单-打印到Excel里

需要传入数据到Excel里的模板如上图所示 *&---------------------------------------------------------------------* *& Report  Z_TEST_COL_TO_ROW_02 *& *&---------------------------------------------------------------------* *& *& *&----------------