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, 展开
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, 展开
3个回答
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!
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!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select 姓名,
sum(decode(Subject, '语文',分数,0) 语文 ,
sum(decode(Subject, '数学',分数,0) 数学 ,
sum(decode(Subject, '英语',分数,0) 英语
from student group by 姓名
sum(decode(Subject, '语文',分数,0) 语文 ,
sum(decode(Subject, '数学',分数,0) 数学 ,
sum(decode(Subject, '英语',分数,0) 英语
from student group by 姓名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询