假如存在有这样一张 info 表:
---------------------------------------------------------------------
sid | sname | course | score
---------------------------------------------------------------------
1 | 张三 | 语文 | 70
1 | 张三 | 数学 | 80
1 | 张三 | 英语 | 90
2 | 李四 | 语文 | 50
2 | 李四 | 数学 | 70
2 | 李四 | 英语 | 60
怎么样才能查询以下数据: sid | sname | 语文 | 数学 | 英语 | 总分 | 平均分
如: 1 | 张三 | 70 | 80 | 90 | 240 | 80
求大神编写 SQL:
------解决思路----------------------
介绍两种写法
SELECT如果科目是动态的,还需要动态处理
sid
,sname
,ISNULL(MAX(CASE[course]WHEN'语文'THEN[score]END),0)[语文]
,ISNULL(MAX(CASE[course]WHEN'数学'THEN[score]END),0)[数学]
,ISNULL(MAX(CASE[course]WHEN'英语'THEN[score]END),0)[英语]
FROM
info
GROUP BY
sid
,sname
以下SQL2005+才可以的写法
SELECT * FROM info PIVOT(MAX(score)FOR course IN([语文],[数学],[英语]))P
------解决思路----------------------
课程固定的话就用case when穷举,否则要用动态SQL