纵表、横表互转的SQL

纵表、横表互转的SQL

By:大志若愚

1、建表:

    纵表结构 Table_A 

create table Table_A
(姓名 varchar(20),课程 varchar(20),成绩 int
)
insert into Table_A(姓名,课程,成绩) values('张三','语文',60)
insert into Table_A(姓名,课程,成绩) values('张三','数学',70)
insert into Table_A(姓名,课程,成绩) values('张三','英语',80)
insert into Table_A(姓名,课程,成绩) values('李四','语文',90)
insert into Table_A(姓名,课程,成绩) values('李四','数学',100)

 

姓名

课程

成绩

张三

语文

60

张三

数学

70

张三

英语

80

李四

语文

90

李四

数学

100

   横表结构 Table_B

create table Table_B
(姓名 varchar(20),语文 int,数学 int,英语 int
)
insert into Table_B(姓名,语文,数学,英语) values('张三',60,70,80)
insert into Table_B(姓名,语文,数学,英语) values('李四',90,100,0)

 

姓名

语文

数学

英语

张三

60

70

80

李四

90

100

0

2、纵表变横表

纵表结构 Table_A   -->    横表结构 Table_B

方法一:聚合函数[max或sum]配合case语句

select 姓名,
sum (case 课程 when '语文' then 成绩 else 0 end) as 语文,
sum (case 课程 when '数学' then 成绩 else 0 end) as 数学,
sum (case 课程 when '英语' then 成绩 else 0 end) as 英语
from Table_A
group by 姓名

方法二:使用pivot

select * from Table_A pivot (max(成绩)for 课程 in(语文,数学,英语)) 临时表

3、横表变纵表

横表结构 Table_B   -->    纵表结构 Table_A

方法一:union all

select 姓名,'语文' as 课程,语文 as 成绩 from Table_B union all
select 姓名,'数学' as 课程,数学 as 成绩 from Table_B union all
select 姓名,'英语' as 课程,英语 as 成绩 from Table_B
order by 姓名,课程 desc

方法二:使用unpivot 

select 姓名,课程,成绩 from Table_B
unpivot
(成绩 for 课程 in ([语文],[数学],英语)) 临时表

 说明:在实际开发中表名,列名不应该使用汉字,在插入的值中有汉字的应该用N修饰,以防止出现乱码,出现意想不到的结果,可能产生2异性的表名可以用[]修饰。

例如:

  insert into Table_B(name,chinese,math,english) values(N'张三',60,70,80)

  create table [user]

转载于:https://www.cnblogs.com/liushen/p/3333936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java按照商品价格排序_按照指定的类型排序

比如有三本书,书名和价格分别如下:《猎物》18.4元、《大明王朝》59.0元、《快乐密码》25.0元。前几天的一篇文章中讲到按照中文拼音进行排序,这里如果想按照价格排序的话怎么办?其实这里就牵涉到在Java中怎样对对象进行排序处理&a…

6款帮助 滚动视差jquery插件

在网页设计中,视差滚动(Parallax Scrolling)是当下流行的网页设计技术,通过让多层背景以不同的速度或者不同的方向移动来形成非常有趣的 3D 运动效果。下面是一些运用视差滚动效果的优秀网页案例: 视差(Pa…

java i线程安全吗_Java中 i++ 是线程安全的么?为什么?

问题在 int i 0; i i; 语句中,i i是线程安全的么?如果不安全,请说明上面操作在JVM中的执行过程,为什么不安全?说出JDK中哪个类能达到以上的效果,并且是线程安全而且高效的,简述其原理。回答语…

EBS 多组织访问设置

如果想让你的职责下为单组织模式,那么你在Profile下只设置MO: Operating Unit的值,MO: Operating Unit提供只访问一个单独的OU。如果你想让你的职责下为多组织模式,你需要设置MO: Security Profile,MO: Security Profile提供多组织…

java第k小元素_java – 如何从对象列表中提取K“最小”元素?

我会对清单进行排序.然后,我将创建一个包含这10个最小对象的列表,并更改原始列表list1以包含其余对象.就像是:Collection.sort(list1);ArrayList yourSmallestElements (ArrayList)(list1.sublist(0, 9).clone());list1.removeAll(yourSmallestElements);注意&…

JQuery学习系列总结—菜单制作

1、页面中的菜单项可以通过嵌套的ul和li来表示 2、菜单最外层为ul,一层每个主菜单放在一个li中,如果有子菜单,在这个主菜单的li中建立新的ul,再依次嵌套即可构建多层的菜单 3、浏览器中ul和li元素默认情况下文字前都有圆点标识符&…

mysql 大量列 动态变量_aardio动态mysql变量设置

aardio动态mysql变量设置aardio动态mysql变量设置废话不多说,直接开始干活!从上午度娘到现在!终于有点结果!需求是从数据库读取数据,根据条件(变量)直接上代码,如有任何问题,欢迎老铁指正&#…

制作简单的java应用程序_使用exe4j工具制作简单的java应用程序

首先需要下载exe4j工具并进行安装,下面是利用exe4j工具制作应用程序的步骤。1.首先将工程导出为可运行的jar包,选择extract required libralies into generated java,会将引用到的jar包也打到里面。右键java工程--export--java--runnable jar…

HDU 4422 The Little Girl who Picks Mushrooms(简单题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid4422 题目大意:小姑娘背着5个包去山上采蘑菇,每座山上只能用一个背包采集。三个小精灵会要她3个背包,其里面蘑菇的数量必须是1024的倍数,否则5个背包都会被拿走。…

Java三维文字特效设计_jQuery实现3D文字特效的方法

本文实例讲述了jQuery实现3D文字特效的方法。分享给大家供大家参考。具体如下:这款基于jQuery的3D文字特效演示,不是真正的3D,是由多个文字形成的3D效果,如果首次加载网页出错的话,请刷新一下页面,当然在使…

MVC的传递数据的方法

1、使用ViewBag 1 #region 0.2 Action方法 ActionResult Index2()2 /// <summary>3 /// Action方法4 /// </summary>5 /// <returns></returns>6 public ActionResult Index2()7 {8 …

java 找不到构造函数_JAVA找不到符号构造函数

JAVA找不到符号构造函数关注:52 答案:2 mip版解决时间 2021-02-05 09:13提问者彼岸独舞2021-02-05 00:06class Rect{private double length;private double width;public Rect(double length,double width){this.widthwidth;this.lengthlength;}public double getLength(){re…

SRF之数据访问

数据访问组件实现实体类和数据表映射、SQL语句配置执行、动态sql语句等功能&#xff0c;ORM方式能实现简单的对象和表的映射&#xff08;配置类似hibernate&#xff09;&#xff0c;但比较单一&#xff08;不支持一对多、多对多的情况&#xff09;&#xff0c;下边不做介绍&…

java 抽象类 方法_java 抽象类

Java为什么使用抽象类和接口Java接口和Java抽象类代表的就是抽象类型&#xff0c;就是我们需要提出的抽象层的具体表现。OOP面向对象的编程&#xff0c;如果要提高程序的复用率&#xff0c;增加程序的可维护性&#xff0c;可扩展性&#xff0c;就必须是面向接口的编程&#xff…

JQuery Show()的几种效果

1 show()方法和hide()方法 $("selector").show() 从display:none还原元素默认或已设置的display属性$("selector").hide() 设置元素的display样式为none&#xff0c;等于$("selector").css("display","none")&#xff…

java 创建servlet出错_java-创建applicationContext.xml时出错:在Servlet...

我正在尝试使用Spring和Hibernate配置Java MVC Web应用程序,但是当我运行服务器时出现此错误,并且我不知道这是什么问题.ERROR: org.springframework.web.context.ContextLoader - Context initialization failedorg.springframework.beans.factory.BeanCreationException: Err…

POJ 2054 Color a Tree

贪心。。。。 Color a TreeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6647 Accepted: 2249Description Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the "ro…

php多进程并发,php多进程模拟并发事务

用实例代码给大家介绍关于php多进程模拟并发事务产生的一些问题&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧数据表drop table if exists test;create table if not exists test (id int not null auto_increment ,count …

查看数据库中有哪些活动的事务,对应的会话id,执行的语句

select dbt.database_id,DB_NAME(dbt.database_id) 数据库名,dbt.transaction_id,at.name,at.transaction_begin_time,case at.transaction_type --事务类型 when 1 then 读/写事务 when 2 then 只读事务 when 3 then 系统事务 when 4 then 分布式事务 end trans…

php xml 空格,php闭合标签输出多余空行使xml页面显示错误的处理

在PHP官方文档中&#xff0c;曾经指出最好不要再结尾添加?>结束标记。但我们编程的习惯和使用的IDE都会为我们自动建立php结束标记?>。这个标记使用在正常情况下是不影响程序的运行的。尤其在早期的php4中&#xff0c;这种标记使用不当也不会影响最后的输出。但我最近遇…