仓酷云
标题:
MYSQL网站制作之关于竖表转横表的成绩
[打印本页]
作者:
山那边是海
时间:
2015-1-16 22:32
标题:
MYSQL网站制作之关于竖表转横表的成绩
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
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
作者:
变相怪杰
时间:
2015-1-27 06:50
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
作者:
海妖
时间:
2015-2-5 03:46
是要和操作系统进行Socket通讯的场景。否则建议慎重!
作者:
不帅
时间:
2015-2-11 03:38
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
作者:
活着的死人
时间:
2015-3-1 20:51
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
作者:
再现理想
时间:
2015-3-10 23:44
入门没那么困难,精通没那么容易
作者:
灵魂腐蚀
时间:
2015-3-17 16:10
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
作者:
第二个灵魂
时间:
2015-3-24 11:23
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2