比如我有一个选课表里面有三个字段name course score
比如这个表里有如下数据
name course score
张三 语文 89
张三 数学 87
张三 英语 86
李四 语文 75
李四 数学 82
怎么用一条sql语句返回这样一个结果呢?
name 语文 数学 英语
张三 89 87 86
李四 75 null 82
比如这个表里有如下数据
name course score
张三 语文 89
张三 数学 87
张三 英语 86
李四 语文 75
李四 数学 82
怎么用一条sql语句返回这样一个结果呢?
name 语文 数学 英语
张三 89 87 86
李四 75 null 82
MAX(DECODE(COURSE,'语文',score,0)) as 语文,
MAX(DECODE(COURSE,'语文',score,0)) as 数学,
MAX(DECODE(COURSE,'语文',score,0)) as 英语
from sc
group by name
MAX(DECODE(COURSE,'语文',score,0)) as 语文,
MAX(DECODE(COURSE,'数学',score,0)) as 数学,
MAX(DECODE(COURSE,'英语',score,0)) as 英语
from sc
group by name
这个试试....
with tmp as
(
select '张三' name, '语文' course, 89 score from dual
union all
select '张三' name, '数学' course, 87 score from dual
union all
select '张三' name, '英语' course, 86 score from dual
union all
select '李四' name, '语文' course, 75 score from dual
union all
select '李四' name, '数学' course, 82 score from dual
)
select name, max(yw) "语文", max(sx) "数学", max(yy) "英语"
from (
select name,
decode(course, '语文', score, null) yw,
decode(course, '数学', score, null) sx,
decode(course, '英语', score, null) yy
from tmp
)
group by name;NAME 语文 数学 英语
--------- ---------- ---------- ----------
张三 89 87 86
李四 75 82
select name,
max(case when course='语文' then score else 0 end),
max(case when course='数学' then score else 0 end),
max(case when course='英语' then score else 0 end)
from sc
group by name;