SQL语句对数据表的行列互换

haotangyu 2010-05-17 11:11:37
SQL语句对数据表的行列互换:
原型数据:

姓名 语文 数学 英语
张三 85 90 95
李四 80 83 86
转换成:

课程 张三 李四
语文 85 80
数学 90 83
英语 95 865
请用sql写出来?

建表语句如下:
CREATE TABLE SC
(
姓名 VARCHAR2(10 BYTE) NOT NULL,
语文 VARCHAR2(10 BYTE),
数学 VARCHAR2(10 BYTE),
英语 VARCHAR2(10 BYTE)
)


ALTER TABLE SC ADD (
CONSTRAINT SC_PK
PRIMARY KEY
(姓名));

INSERT INTO SC VALUES('张三','85','90','95');
INSERT INTO SC VALUES('李四','80','83','86');

commit;

那如何进行互换呢?(不是以下说的这种情况哦)

...全文
215 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
行舟 2010-05-17
  • 打赏
  • 举报
回复
?????不懂
haotangyu 2010-05-17
  • 打赏
  • 举报
回复
不是如下这种情况,请看好。
/*
在实际使用sql工作中总会碰到将某一列的值放到标题中显示.就是总说的行列转换或者互换.
比如有如下数据:
ID NAME KECHENG CHENGJI
-- ---------- -------------------- -------
1 a 语文 80
2 a 数学 70
3 b 语文 40
4 b 数学 100
5 c 语文 90
6 c 数学 92
那末我要求显示的结果是:
NAME YUWEN SHUXUE
---------- ---------------------- ----------------------
a 80 70
也就是说把课程这一列放到行上显示.把成绩按照课程分配到相对应的行.
我只介绍2中简单易用的方法,使用游标或者建立临时表的方法就不介绍了.效率很慢,不易理解.
首先建立表:
*/

create table fzq
(
id varchar(2),
name varchar(10),
kecheng varchar(20),
chengji varchar(3)
);


--插入数据:
insert into fzq values ('1','a','语文','80');
insert into fzq values('2','a','shuxue','70');
insert into fzq values ('3','b','yuwen','40');
insert into fzq values ('4','b','shuxu','100');
insert into fzq values ('5','c','yuwen','90');
insert into fzq values ('6','c','shuxu','92');

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

select name,sum(yuwen) yuwen,sum(shuxue) shuxue from
(
select name,chengji yuwen,'0' shuxue from fzq
where kecheng='yuwen' union
select name,'0' yuwen,chengji shuxue
from fzq
where kecheng='shuxue'
) aaa
group BY name;

/*执行结果:
NAME YUWEN SHUXUE
---------- ---------------------- ----------------------
a 80 70
b 40 100
c 90 92
*/
/*
其次是用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 80 70
b 40 100
c 90 92
所有例子在oracle中测试,sql server没有测试,请根据实际情况修改
*/

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧