一、引言

  前些日子遇到了一个sql语句的横排转竖排以及竖排转横排的问题,现在该总结一下,具体问题如下:

这里的第二题和第三题和下面所讲述的学生的成绩表是相同的,这里给大家留一下一个念想,大家可以自己做做上面的笔试题。

我主要针对的是第二题和第三题来做讲解,第一题相信大家都会做,这里就不赘述了,直接进入正题!

二、问题详解

  1、我们先来说说第二题,

  (1)首先我们先创建一个表,用实际来说话,新建一个tb表,

DROP TABLE tb;
CREATE TABLE tb(
name varchar(10),
subject VARCHAR(10),
score NUMERIC
);
INSERT INTO tb(name,SUBJECT,score) VALUES('张三','语文',74);
INSERT INTO tb(name,SUBJECT,score) VALUES('张三','数学',83);
insert into tb(Name , Subject , score) values('张三' ,'物理' , 93);
insert into tb(Name , Subject , score) values('李四' , '语文' , 74);
insert into tb(Name , Subject , score) values('李四' , '数学' , 84);
insert into tb(Name , Subject , score) values('李四' , '物理' , 94); SELECT * FROM tb;

(2)最初的查询结果如图所示

(3)下面我们开始竖排转横排

SELECT NAME 姓名,
MAX(CASE SUBJECT WHEN '语文' THEN score ELSE 0 END) 语文,
MAX(CASE SUBJECT WHEN '数学' THEN score ELSE 0 END) 数学,
MAX(CASE SUBJECT WHEN '物理' THEN score ELSE 0 END) 物理
FROM tb GROUP BY NAME

结果是:

(4)进一步的拓展,假如我们想要的结果为下图

SELECT NAME 姓名,
MAX(CASE SUBJECT WHEN '语文' THEN score ELSE 0 END) 语文,
MAX(CASE SUBJECT WHEN '数学' THEN score ELSE 0 END) 数学,
MAX(CASE SUBJECT WHEN '物理' THEN score ELSE 0 END) 物理,
SUM(score) AS 总分,
AVG(score) AS 平均分
FROM tb GROUP BY NAME

2、下面来讨论一下横排转竖排的问题

(1)首先创建表tb1,

CREATE TABLE tb1(
姓名 VARCHAR(10),
语文 NUMERIC,
数学 NUMERIC,
物理 NUMERIC
);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94); SELECT * FROM tb1;

如图所示:

(2)横排转竖排

方法一:

select 姓名 as name,'语文' as subject,语文 as score from tb1
union
select 姓名 as name,'数学' as subject,数学 as score from tb1
union
select 姓名 as name,'物理' as subject,物理 as score from tb1
order by name

方法二:

SELECT * FROM (
SELECT 姓名 as NAME,'语文' AS SUBJECT, 语文 AS score from tb1 UNION
SELECT 姓名 AS NAME,'数学' AS SUBJECT , 数学 AS score from tb1 UNION
SELECT 姓名 AS NAME,'物理' AS SUBJECT, 物理 AS score FROM tb1
)t ORDER BY NAME

结果为:

3、下面讨论一下第三题

(1)创建表tb2

CREATE TABLE tb2(
YEAR NUMBER,
salary NUMBER
);
INSERT INTO tb2(YEAR,salary) VALUES(2000,1000);
INSERT INTO tb2(YEAR,salary) VALUES(2001,2000);
INSERT INTO tb2(YEAR,salary) VALUES(2002,3000);
INSERT INTO tb2(YEAR,salary) VALUES(2003,4000);
SELECT * FROM tb2;

如图:

(2)利用over函数完成所需要求,

 select year,sum(salary) over(order by salary) from tb2

考察开窗函数的,

想看更多over开窗函数可以查看这篇博客:http://blog.csdn.net/moshansk/article/details/52451455

myql数据库,sql横排转竖排以及竖排转横排,oracle的over函数的使用的更多相关文章

  1. 织梦仿站列表页pagelist分页显示竖排,如何修改成横排?

    织梦仿站列表页pagelist分页显示竖排,如何修改成横排? 织梦列表页的分页标签是采用pagelist来进行调用的,但是很多人在调用之后会出现一个列表竖着排列的问题(横排美观度好一些),还是非常不美 ...

  2. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  3. Oracle数据库--SQL

    1.事务(Transaction ) 1)命名事务 set transaction name ‘transaction_name ’; 2)查看事务是否存在 select name from v$tr ...

  4. 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?

    php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率    sql的explain(mysql),启用slow query log记录慢查询.   通常还要 ...

  5. db2数据库sql报错信息

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成   01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 ...

  6. 数据库SQL Server与C#中数据类型的对应关系

    ylbtech- .NET-Basic:数据库SQL Server与C#中数据类型的对应关系 数据库SQL SServer与C#中数据类型的对应关系 1.A,返回顶部 数据库 C#程序 int int ...

  7. 数据库 SQL语句优化

    温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...

  8. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  9. 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

随机推荐

  1. win10系统格式化、恢复出厂设置的操作步骤

    恢复电脑出厂设置具体步骤

  2. 关于css里大于号(>)的用法

    之前用的css没涉及到这个问题,今天看到.知道大概用法,但不知道和普通的后代选择器有什么区别.到网上找了,其实w3c的css文档里有很详细明确的介绍(http://www.w3school.com.c ...

  3. 模拟80(a)

    其实隔壁的那套题比这套难的多....一道都不会.. T1 题目中已经给出了递推公式,那么这题就没什么了,直接矩阵乘就完了. 然而考场上并没有看出矩阵,主要是用了好久发明crt,我知道原理,但是不会打了 ...

  4. FHQ treap学习(复习)笔记

    .....好吧....最后一篇学习笔记的flag它倒了..... 好吧,这篇笔记也鸽了好久好久了... 比赛前刷模板,才想着还是补个坑吧... FHQ,这个神仙(范浩强大佬),发明了这个神仙的数据结构 ...

  5. eclipse断点的使用---for循环举例

    在很多时候,我们在学习过程中,不知道代码具体的实现过程,很好奇这个变量的值怎么就发生的变化,用好断点的使用,帮助我们更好的理解. 例子:10以内的奇数之和 package day03; public ...

  6. m96-97 lsc nc赛

    这一次 lsc 再一次一道题都没AC,看来lsc已经凉了! 出了分,旁边的_LH大喊了一声 “woc,lsc,你真是太垃圾!”...........“好吧!” 我确实很垃圾!(大佬这次都没考,所以我更 ...

  7. linux shell脚本语法笔记

    1.&,&&,|,|| &:除了最后一个cmd,前面的cmd均已后台方式静默执行,执行结果显示在终端上,个别的cmd错误不影响整个命令的执行,全部的cmd同时执行 &a ...

  8. 算法编程题积累(4)——腾讯笔试"有趣的数字“问题

    本题基本思路:先对原序列进行排序,再根据不同情况采用不同算法. 首先差最大的对数最好求:用最小的数的个数 × 最大的数的个数即可. 接着求差最小的对数: 1.当序列中无重复关键字时:可知最小差必然产生 ...

  9. 小白学 Python(22):time 和 calendar 模块简单使用

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  10. google在nature上发表的关于量子计算机的论文(Quantum supremacy using a programmable superconducting processor 译)— 附论文

    Google 2019年10月23号发表在Nature(<自然><科学>及<细胞>杂志都是国际顶级期刊,貌似在上面发文两篇,就可以评院士了)上,关于量子计算(基于 ...