一、引言

  前些日子遇到了一个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. vue中改变数组的值视图无变化

    今天开发的时候遇到一个多选取消点击状态的,渲染的时候先默认都选中,然后可以取消选中,自建了一个全为true的数组,点击时对应下标的arr[index]改为false,数据改变了状态没更新,突然想起来单 ...

  2. Java基础01-集合1、泛型

    集合.泛型 第一章:集合1 1. 什么是集合 定义:在Java中,集合是一种可以存储多个数据的容器. 代码: ArrayList<String> list = new ArrayList& ...

  3. 【排列组合】给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)

    版权声明:本文为CSDN博主「梵解君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/hadeso/art ...

  4. 利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...

  5. NOIP模拟测试33

    这次考试很失败. T1sb题,40分钟切了,当我打完对拍全过去上厕所的时候,碰到了yxm. yxm:我又自闭了,没有一点进展. 我:…… yxm:你会做几个? 我(思考再三):T1只会暴力. (我这么 ...

  6. 使用Typescript重构axios(十二)——增加参数

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. day 2上午 elect 选举 背包

    #include<iostream> using namespace std; int n; ; ]; long long p[maxn]; long long dp[maxn][maxn ...

  8. Spring+SpringMVC整合----配置文件

    1.在 web.xml 中加载 spring 的配置文件 bean.xml    底层是 Listener <!-- Spring --> <context-param> &l ...

  9. Havok Physics 2012(2)

    目录 Havok Physics 2012 Chapter 2. Creating a Simulation 创建一个模拟世界 1. Creating Physics 2012 Objects Hav ...

  10. 高德地图3D菱形 区域点击搜索

    更新一波吧 <!doctype html> <html lang="zh-CN"> <head> <!-- 原始地址://webapi.a ...