Oracle SQL 行转列求助 30

姓名subject分数李四语文100李四数学80李四英语90张三语文80张三数学70张三英语60变更为/*姓名语文数学英语------------------------... 姓名
subject
分数

李四
语文
100

李四
数学
80

李四
英语
90

张三
语文
80

张三
数学
70

张三
英语
60

变更为
/*
姓名 语文 数学 英语
---------- ----------- ----------- -----------
李四 100 80 90
张三 80 70 60
*/
--动态SQL,指subject不止语文、数学、英语这三门课程。

以下是找到的SQL SERVER的SQL,请告诉帮忙变为Oracle的SQL,感谢@@@!

declare @sql varchar(8000)
set @sql = 'select student as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then grade else 0 end) [' + Subject + ']'
from (select distinct Subject from test_table) as a
set @sql = @sql + ' from test_table group by student'
exec(@sql)
原格式,要变更为
变更为/*姓名 语文 数学 英语 ---------- ----------- ----------- -----------李四 100 80 90张三 80 70 60*/--动态SQL,
展开
 我来答
匿名用户
2015-07-16
展开全部
select student,
       max(decode(Subject , '语文', grade)) 语文,
       max(decode(Subject , '数学', grade)) 数学,
       max(decode(Subject , '英语', grade)) 英语
  from test_table a
 group by student

 pivot:

select *
  from (select student, Subject, grade from test_table )
pivot(max(grade)
   for Subject in('语文', '数学', '英语'))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-16
展开全部
DECLARE
t_name VARCHAR2(10);
t_course1 NUMBER;
t_course2 NUMBER;
t_course3 NUMBER;
TYPE c_type IS REF CURSOR;
cur c_type;

BEGIN
OPEN cur FOR
'SELECT t_name,
SUM(CASE t_course WHEN '''||'语文'||''' THEN t_score ELSE 0 END),
SUM(CASE t_course WHEN '''||'数学'||''' THEN t_score ELSE 0 END),
SUM(CASE t_course WHEN '''||'物理'||''' THEN t_score ELSE 0 END)
FROM tb GROUP BY t_name';
LOOP
FETCH cur INTO t_name,t_course1,t_course2,t_course3;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(t_name||'语文'||t_course1||'数学'||t_course2||'物理'||t_course3);

END LOOP;
CLOSE cur;
END;

给你一个参考的例子,将参数换下就OK了。good luck!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金刚钻Johnny
2015-07-16 · TA获得超过356个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:54万
展开全部
select 姓名,
sum(decode(Subject, '语文',分数,0) 语文 ,
sum(decode(Subject, '数学',分数,0) 数学 ,
sum(decode(Subject, '英语',分数,0) 英语
from student group by 姓名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式