数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

关于oracle的查询结果的行列互换


发布日期:2024年07月18日
 
关于oracle的查询结果的行列互换

/*

在实际使用sql工作中总会碰到将某一列的值放到标题中显示就是总说的行列转换或者互换

比如有如下数据:

ID NAME KECHENG CHENGJI

a 语文

a 数学

b 语文

b 数学

c 语文

c 数学

那末我要求显示的结果是:

NAME YUWEN SHUXUE

a

也就是说把课程这一列放到行上显示把成绩按照课程分配到相对应的行

我只介绍中简单易用的方法使用游标或者建立临时表的方法就不介绍了效率很慢不易理解

首先建立表:

*/

create table fzq

(

id varchar()

name varchar()

kecheng varchar()

chengji varchar()

);

插入数据:

insert into fzq values (a语文);

insert into fzq values(ashuxue);

insert into fzq values (byuwen);

insert into fzq values (bshuxu);

insert into fzq values (cyuwen);

insert into fzq values (cshuxu);

/*首先使用union如果课程这列有多个值那么脚本的代码就很长了*/

select namesum(yuwen) yuwensum(shuxue) shuxue from

(

select namechengji yuwen shuxue from fzq

where kecheng=yuwen union

select name yuwenchengji shuxue

from fzq

where kecheng=shuxue

) aaa

group BY name;

/*执行结果:

NAME YUWEN SHUXUE

a

b

c

*/

/*

其次是用case这种方法代码比较短适合列值很多的情况

*/

select name sum(case kecheng when yuwen then chengji end) yuwen

sum(case kecheng when shuxue then chengji end) shuxue

from fzq

group by name;

/*执行结果:

NAME YUWEN SHUXUE

a

b

c

所有例子在oracle中测试sql server没有测试请根据实际情况修改

*/

select namesum(decode(kecheng 语文 chengji null)) 语文

sum(decode(kecheng 数学 chengji null)) 数学

sum(decode(kecheng 英语 chengji null)) 英语

from fzq

group by name

上一篇:需要 Oracle9i 的 10 大理由

下一篇:在Oracle9i里基于函数的仅索引扫描