当前位置: 代码迷 >> Sql Server >> 数据库查询解决方法
  详细解决方案

数据库查询解决方法

热度:18   发布时间:2016-04-24 09:44:00.0
数据库查询
假如存在有这样一张 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
  相关解决方案