姓名 | 科目 | 成绩 |
张三 | 语文 | 66 |
张三 | 数学 | 77 |
张三 | 英语 | 88 |
李四 | 语文 | 99 |
李四 | 数学 | 100 |
李四 | 英语 | 55 |
王五 | 语文 | 44 |
王五 | 数学 | 33 |
马六 | 英语 | 22 |
马六 | 语文 | 11 |
姓名 | 语文 | 数学 | 英语 |
张三 | 66 | 77 | 88 |
李四 | 99 | 100 | 55 |
王五 | 44 | 33 | 0 |
马六 | 11 | 0 | 22 |
select name,
sum(case subject when '语文' then result else 0 end) 语文,sum(case subject when '数学' then result else 0 end) 数学,
sum(case subject when '物理' then result else 0 end) 物理,
sum(case subject when '政治' then result else 0 end) 政治,
sum(case subject when '英语' then result else 0 end) 英语
from cj c
group by name;
select name,
sum(decode(subject, '语文', result, 0)) as 语文,
sum(decode(subject, '数学', result, 0)) as 数学,
sum(decode(subject, '英语', result, 0)) as 英语
from cj group by name
oracle decode含义解释:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
例如:decode(subject, '语文', result, 0) As 语文
decode(result, 0, 男,1,女,2,人妖, 0) 性别