仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 734|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之关于竖表转横表的成绩

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。成绩
关于竖表转横表的成绩
本文dinya
内容择要:在开辟历程,常常碰到一些将表的显现体例举行转换的需求,我们习气性称之为竖表到横表的转换,本文经由过程一个例子来扼要申明罕见的两种竖表转横表的成绩。

本文合适读者局限:Oracle低级,中级

体系情况:

  OS:windows2000Professional(英文版)

Oracle:8.1.7.1.0

注释:

在实践的使用中,我们常常碰到必要转换数据显现体例,好比将横表转为竖表,或将竖表转换为横表的情形,如:课程表的显现体例,部门均匀人为的排名等情形。上面将将依据两个实例子的需求形貌给出两种罕见的竖表转横表的办理举措(本例中的数据意义是:1、2、三年级的各科目最高分统计)。

表布局:

createtabletest_table
(
grade_idnumber(8),--年级:1、一年级,2、二年级,3、三年级
subject_namevarchar2(30),--科目:包括语文、数学、外语、政治等科目
max_scorenumber(8)--最高分
)

表中数据:

SQL>select*fromtest_table;

GRADE_IDSUBJECT_NAMEMAX_SCORE

1语文95

1数学98

2语文86

2数学90

2政治87

3语文93

3数学88

3英语88

3政治97

9rowsselected.



第一种转换体例:

需求形貌:检察每一个年级在体系中存在的科目信息,并各年级的科目信息按上面的格局显现:

GRADE_IDSUBJECT_NAME

1语文数学

    2语文数学政治

    3语文数学英语政治

剖析:在请求失掉的了局中,每一个年级的科目将酿成一笔记录,并且每一个年级的科目是不流动的。以是思索写个函数来办理,输出年级信息,利用游标失掉该年级的一切科目信息并前往值。

1、建函数:

SQL>createorreplacefunctiontest_fun(p_gradenumber)returnvarchar2as

2v_tempvarchar2(100):=;

3v_outvarchar2(500):=;

4cursorcisselecta.subject_namefromtest_tableawherea.grade_id=p_grade;

5begin

6openc;   --翻开游标

7loop

8fetchcintov_temp;

9exitwhenc%notfound;

10v_out:=v_out||||v_temp;

11endloop;

12closec;--封闭游标

13returnv_out;

14exception

15whenothersthen

16returnAnerroroccured;

17end;

18/

Functioncreated.



SQL>createorreplacefunctiontest_fun(p_gradenumber)returnvarchar2as

2v_outvarchar2(500):=;

3cursorcisselecta.subject_namefromtest_tableawherea.grade_id=p_grade;

4begin

5forv_tempincloop

6v_out:=v_out||||v_temp.subject_name;

7endloop;--体系主动封闭游标

8returnv_out;

9exception

10whenothersthen

11returnAnerroroccured;

12end;

13/

Functioncreated.



2、挪用函数失掉输出了局:

SQL>selectdistincta.grade_id,test_fun(a.grade_id)subjectfromtest_tablea;

GRADE_IDSUBJECT

1语文数学

2语文数学政治

3语文数学英语政治



第二种转换体例:

需求形貌:请求将表中的年级、科目及最高的信息依照下表的格局显现,假如该年级没开的课程,则其最高分用0暗示:

年级语文数学英语      政治

一年级959800

二年级8690087

三年级93888897



剖析:该需求将年级的分数及科目信息由纵向转为横向,如许就要针对每一个年级的,对其科目举行判别,存在科目则显现科目标最高分,假如不存在显现0。这时候候就思索到利用decode函数来办理。完成以下:

select
decode(t.grade_id,1,一年级,2,二年级,3,三年级)年级,
sum(decode(t.subject_name,’语文’,t.max_score,0))语文,
sum(decode(t.subject_name,数学,t.max_score,0))数学,
sum(decode(t.subject_name,英语,t.max_score,0))英语,
sum(decode(t.subject_name,政治,t.max_score,0))政治
from
test_tablet
groupby
t.grade_id



必要申明的是,在第一种转换体例中写了两个函数,两个函数完成的是统一个需求,所分歧的是,两个函数中游标利用体例分歧,地一个函数中手动翻开游标,轮回停止后请求手动封闭。尔后一个函数利用for轮回,轮回停止后体系主动封闭光标。在第二种转换体例中,利用了decode函数,关于decode的具体用法,请参考oracle函数相干文档。

总  结:

下面的两种转换体例是在开辟中常常碰到的情形,在开辟中的其他相似的转换都能够参考下面的转换体例,利用decode,nvl等函数举行一些出格的处置便可失掉想要的显现体例.
本文你能够在作者的Blog上找到,更多内容请上岸作者的Blog。

作者Blog:http://blog.csdn.net/dinya2003/
如转载,请保存作者Blog信息.需要处理因此带来的更多的支持工作,这有可能会带来成本上的提高。在这种情况下,一些MySQL学习教程发行商可能倾向于选择别的开源数据库,例如遵循BSD授权的PostgreSQL。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 16:18:08 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-27 06:50:17 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
海妖 该用户已被删除
地板
发表于 2015-2-5 03:46:14 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
不帅 该用户已被删除
5#
发表于 2015-2-11 03:38:29 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
活着的死人 该用户已被删除
6#
发表于 2015-3-1 20:51:37 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
再现理想 该用户已被删除
7#
发表于 2015-3-10 23:44:42 | 只看该作者
入门没那么困难,精通没那么容易
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-17 16:10:15 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-24 11:23:20 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-6 09:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表