第一种是利用的解码,很普通的一种写法:
选择sname,总和(解码(当然,“语文”,得分,0))“语文”,总和(解码(当然,“数学”,得分,0))“数学”,总和(解码(当然,“英语”,得分,0))“英语”分数group by sname;
第二种是利用oracle的一种函数主,是列转行。还有一个透视,是行转列
select * from(选择sname,课程,成绩分数)
主(
,总和(分数)
,课程(
,,,“语文”为“语文”,
,,,的数学”为“数学”,
,,,的英语”为“英语”)
命令sname;
数据源:
sname课程,分数
- - - - - - - - - - - - - - - - - - -
比尔,语文,,80年
法案,数学,,90年
法案,英语,,92年
吉姆,语文,,78年
吉姆,数学,,88年
吉姆,英语,,98年
两种方式结果对比:
SNAME,语文,数学,英语
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
比尔,80年,,90年,92年,吉姆
,78年,,88年,98年,
,,,,,,,
,,,,,,,
SNAME,语文,数学,英语
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
法案,80年,,90年,,92年,吉姆
,78年,,88年,,98年,