数据库之横表转纵表、纵表转横表

/*横表变纵表或纵表变横表

成绩表如下
Name Course Grade
张三 语文 95
张三 数学 90
张三 英语 89
李四 语文 92
李四 数学 88
李四 英语 97
变成

姓名 语文 数学 英语
张三 95 90 89
李四 92 88 97
*/

--纵表转横表
    create table biao
(
PName varchar(10),
PCourse  varchar (10),
PGrade int
)
go
 insert into biao values(‘张三‘,‘语文‘,‘95‘)
 insert into biao values(‘张三‘,‘数学‘,‘90‘)
 insert into biao values(‘张三‘,‘英语‘,‘89‘)
 insert into biao values(‘李四‘,‘语文‘,‘92‘)
 insert into biao values(‘李四‘,‘数学‘,‘88‘)
 insert into biao values(‘李四‘,‘英语‘,‘97‘)
 select* from biao
 --下面输入转换方式
 select PName ,
 SUM(case PCourse when ‘语文‘then PGrade else 0 end)as 语文,
 SUM(case PCourse when ‘数学‘then PGrade else 0 end)as 数学,
 SUM(case PCourse when ‘英语‘then PGrade else 0 end)as 英语
 from  biao
 group by PName
--横表转纵表
--例2创建表2
 create table biao1
(
姓名 varchar(20),
语文 int,
数学 int,
英语 int
)
go
 insert into biao1 values(‘张三‘,95,90,89)
 insert into biao1 values(‘李四‘,92,88,97)
 select * from biao1
--下面输入转换方式
 select * from biao1
 select 姓名 ,‘语文‘ as 课程,语文 as 成绩 from biao1 union all
 select 姓名,‘数学‘as 课程,数学 as 成绩 from biao1 union all
 select 姓名,‘英语‘as 课程,英语 as 成绩 from biao1
 order by 姓名 desc
时间: 2024-11-01 20:46:05

数据库之横表转纵表、纵表转横表的相关文章

【数据库】主键,外键,主表,从表,关联表,父表,子表

转自:https://www.2cto.com/database/201707/662425.html 一.前言 在数据库设计中,hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的. 二.概述 下面从数据库设计角度,ORM框架使用(以Hibernate为例),PowerDesigner软件以及实际业务角度进行一下介绍. (1) 数据库角度而言 主键:一般情况下

OrmLite动态创建表,一个实体类创建多张表的的偏招

在做一个Android的项目,因为使用数据库频繁,实体字段也比较多,于是打算采用ORM框架,发现OrmLite还不错,于是下了下来,打算使用. 没想到还没正式开工,就遇到问题了.我现在的一个需求如下, 我有一个实体类如下,代表聊天消息,现在要做的是针对每一个当前用户(userId)对应一个朋友(friendId)都要创建一个表.需求比较蛋疼,我本来想的是直接在加两个字段就搞定的,但是我们老大说要分表.没办法只能分表. public class ChatMessage{ public ChatMe

SqlServer将表中数据复制到另一张表

insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和前1000条数据复制到Phone2表 数据库中的某个表删除重复数据(phone2表不能存在) select distinct  * into phone2 from phone 表phone的数据放到phone2中(phone2表可以存在) insert into phone2(ph,attr,ty

10-客户端防表单重复提交和服务器端session防表单重复提交

/****************************************************DoFormServlet********************************************************/ package session; import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import

oracle表空间查询维护命令大全之三(暂时表空间)史上最全

--UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' SIZE 10M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; --注意:在OPEN状态下某

sql Server中不允许保存更改您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项

今天改了sqlserver中的一张表,弹出了下面的对话框,显示不允许保存更改. 您所做的更改要求删除并重新创建以下表.您对无法重新创建的表进行了更改或启 用了"阻止保存要求重新创建表的更改"选项.这是在使用Sql Server时碰到到问 题,在网上找了下,发现在解决方法非常简单. 解决方法: 在Management Studio中,选择"工具->选项->Designers->表设计器和数据库设计器"中,把"阻止保存要求重新创建表的更改&q

关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)

用户:   whnaproject     所属表空间: whnaproject 新用户   : wniec            所属新表空间: wniec 要求:将用户whnaproject中的数据库表以及数据 ,全部复制到 新表空间wniec的  wniec用户中. 常规过程:用exp命令把用户whnaproject的表及数据导出,然后用IMP命令把导出的表及数据导入到新用户wniec中. 存在问题:用户whnaproject的表及数据可以导入到新用户wniec中,但wniec中的导入的表

oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, b.blocks * 32 / 1024 / 1024, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text, b.contents FROM v$session a, v$sort_usage b

]sap透明表、结构、簇介绍以及查找表方法

一些人在写开发功能说明书的时候不知道如何去找屏幕字段对应的透明表,下面我来介绍一个比较有效的方法:首先简单介绍一下概念:在SAP中的表的种类有以下三种:Tranparent table,Pools,Cluster table. 透明表每个透明表在数据库中有一个相应的物理表.物理表的名称和数据字典中的逻辑表定义的名称一致.事物中处理的数据存贮在透明表中.可以通过数据库直接查询,abap人员也希望能了解这个表的名字. 存贮表存储表可以用来存贮控制数据(例如:屏幕顺序,程序参数或临时数据).几个存储表

取得一张表的数据不在另一张表中的最优秀方法(JOIN与EXISTS的效率研究)

业务需求: 公司有个CRM经纪人管理系统,前天遇到的比较棘手的问题是,要查询一张表中不在另一张表中的所有用户并分页显示,但问题是外表的数据量很大,如果用not in(select ..),not exists(select ...)之类的子查询 的话需要对子查询表进行所有信息的调用过滤才行,一单子查询数据量过大效率问题就来了,于是就私下里查了一点资料,并根据资料中提供的例子建立了对应的测试表做了一些测试,随后将解决问题的方法移交给了技术部的邹鸿同事去解决问题,因为是前天的事情了,本来是事情忙没时