select uname,max(decode(upwd,'计算机',status)) as jsj,max(decode(upwd,'语文',status)) as yw, max(decode(upwd,'英语',status)) as yy,max(decode(upwd,'数学',status)) as sx from tbl_user t group by uname;
SQL> with t as( 2 select '张三' name,'计算机' course,80 score from dual union all 3 select '张三','语文',180 from dual union all 4 select '李四','英语',80 from dual union all 5 select '张三','数学',180 from dual) 6 select name, 7 max(decode(course,'计算机',score)) 计算机, 8 max(decode(course,'语文',score)) 语文, 9 max(decode(course,'英语',score)) 英语, 10 max(decode(course,'数学',score)) 数学 11 from t 12 group by name 13 / /* NAME 计算机 语文 英语 数学 ---- ---------- ---------- ---------- ---------- 李四 80 张三 80 180 180 */
我是这么处理的 写一个存储过程 先将课程总数查询出来 然后利用游标拼接sql 最终sql和他们拼出的是一样的 就是select max()as 1,max()as 2这样的样子 然后建一个视图 create view as 拼出来的sql 存储过程执行完,就可以select * from view来查询了 这样虽然也不完美 但是总算是可以把结果查出来了
max(decode(upwd,'英语',status)) as yy,max(decode(upwd,'数学',status)) as sx
from tbl_user t group by uname;
SQL> with t as(
2 select '张三' name,'计算机' course,80 score from dual union all
3 select '张三','语文',180 from dual union all
4 select '李四','英语',80 from dual union all
5 select '张三','数学',180 from dual)
6 select name,
7 max(decode(course,'计算机',score)) 计算机,
8 max(decode(course,'语文',score)) 语文,
9 max(decode(course,'英语',score)) 英语,
10 max(decode(course,'数学',score)) 数学
11 from t
12 group by name
13 /
/*
NAME 计算机 语文 英语 数学
---- ---------- ---------- ---------- ----------
李四 80
张三 80 180 180
*/
写一个存储过程 先将课程总数查询出来 然后利用游标拼接sql
最终sql和他们拼出的是一样的 就是select max()as 1,max()as 2这样的样子
然后建一个视图 create view as 拼出来的sql
存储过程执行完,就可以select * from view来查询了
这样虽然也不完美 但是总算是可以把结果查出来了