求助一句sql写法。12楼问题更新
- opensesameinsert into table_right
(学号,语文总分,数学总分,英语总分,历史总分,考试总分) "
select 学号,sum(科目)=======>这里只能得到考试总分,一个个科目怎么分开sum呢
from table_left - oclockpivot
- opensesame谢谢,不知道还有这个函数,研究一下
本来的思路是想sum后面加一个筛选,但是查下来没有这种写法 - Johnny_zhuselect 学号,
sum(case when 科目='语文' then 成绩 else 0 end) as [语文总分],
sum(case when 科目='英文' then 成绩 else 0 end) as [英文总分],
sum(case when 科目='数学' then 成绩 else 0 end) as [数学总分],
sum(成绩) as [总分]
from table1 group by 学号 - pepsing看楼上吧
- opensesame谢谢谢谢,基本解决,只是还有两个字段比较特殊
实际上,另外有个表,设置了分类的上下级关系,比如文科里分了语文,英语,理科分了数学,物理
所有还有两个列,文科总分,理科总分
这里科目的ID是不固定的,所以还要left join 科目分类表
这两个字段搞不定了 - Johnny_zhu很简单啊 ,和上面一样用法,比如 left join table2 on table1.科目 = table2.科目 , 理科总分可以这样写 sum(case when table2.总科目='理科' then table1.学分 else 0 end) as [理科总分]
- opensesame非常感谢,学习了
- qinghe1987
- opensesame总算搞定,这个函数太神奇了,感谢楼上all
- opensesame之前的问题解决了,更新一下新问题,如果不同的学科在各自一个单独的表里,而且有的学号却语文,有的少数学,就是每个表里的学号行数不一致,怎么合并成一楼这样统计呢。HiPDA·NG
- ptcptr既然之前的问题能解决,现在只是成绩分开到单独的表里了,那么参见5楼写法,把最后的
from table1 group by 学号
中的 table1 改成
(select 科目='语文',学号,成绩 from 语文成绩表 union all
select 科目='数学',学号,成绩 from 数学成绩表 union all
select 科目='英语',学号,成绩 from 英语成绩表 union all
select 科目='历史',学号,成绩 from 历史成绩表) as table1