oracle数据库关于把表的行变成列

姓名 数学 语文 1 2 3
1 张飞 60 61 姓名 张飞 赵云 庞统
2 赵云 80 85 变成 数学 60 80 99
3 庞统 99 80 语文 61 85 80

第1个回答  2012-02-13
姓名 数学 语文 姓名 张飞 赵云 庞统
张飞 60 61 数学 60 80 99
赵云 80 85 变成 语文 61 85 80
庞统 99 80
而且第一行为列名,不是表中的数据,这样的话
也就是第一个表下面三行的数据,变成第二个表下面两行的数据
这样还是可以的追问

来个

追答

明天给你回复
今天已经准备关机睡觉了

表原始数据:
SELECT * FROM temp;
XINGM YUWEN SHUXUE
张 60 61
赵 80 81
庞 90 91

SQL:
SELECT '语文' kemu,
SUM(decode(t.xingm, '张', t.yuwen, 0)) 张,
SUM(decode(t.xingm, '赵', t.yuwen, 0)) 赵,
SUM(decode(t.xingm, '庞', t.yuwen, 0)) 庞
FROM temp t
UNION
SELECT '数学' ,
SUM(decode(t.xingm, '张', t.shuxue, 0)) ,
SUM(decode(t.xingm, '赵', t.shuxue, 0)) ,
SUM(decode(t.xingm, '庞', t.shuxue, 0))
FROM temp t
查询结果:
KEMU 张 赵 庞
数学 61 81 91
语文 60 80 90

本回答被网友采纳
第2个回答  2012-02-12
删掉重建,类型要换成字符型,这样做的后果是不可想象的,实际上,按你的改了后这个数据库已经没有意义了追问

数据库有没有意义无所谓,我要的是这个改变的代码,主要是面试用的。

追答

设原表为table1,新建表table2,取table1所有的id为table2字段名,类型为字符,取table1字段“姓名”下所有数据,全部转换为字符类型,插入table2,增加第一项为‘姓名’,去table1字段“数学”..同上类似,直至结束,

追问

不是这样的,你这样就是重新建表了。我要的是使用游标或存储过程(不一定是什么)这样的方式来改变显示结果。表实际是不变的。

第3个回答  2021-04-14

本节视频我们来聊一聊如何添加数据表的行与列。Treelab 官网:www.treelab.com.cn

第4个回答  2012-02-13
面试的话去看一些关于sql行转列的知识点吧
第5个回答  2012-02-12
同意一楼说法。追问

同上的回答

追答

你是要算分么?算分的话可以这样子写:
select 姓名,数学+语文 from table ;

相似回答