回 帖 发 新 帖 刷新版面

主题:用SQL查询如题所示,怎么写这个语句呢

表结构:
student_id    subject_id    score
201001    日本語    80
201001    化学    80
201002    日本語    90
201003    日本語    100
201001    数学    80
201001    物理    85
201002    数学    86
201004    物理    87
通过查询表,要求查询出的数据如下(即根据student_id将各自的分数横向显示)                    

student_id    日本語    数学    物理    化学    
201001    80    80    85    80    
201002    90    86    null    null    
201003    100    null    null    null    
201004    null    null    87    null    

回复列表 (共8个回复)

沙发

一个语句是解决不了了,要使用存储过程了

板凳

 可以实现,只写了前两项,SQL语句如下:
SELECT a.student_id as 学号 ,a.score as 日本语,b.score as 数学
FROM subject_score a, subject_score b
where a.student_id=b.student_id and
a.subject_id="日本语" and b.subject_id="数学"

3 楼

[em2]

4 楼

就是创建游标啊!
做2个游标,嵌套使用。好象不复杂嘛!

5 楼

假设表名stu
select student_id a.riyu,b.shuxue,c.yingyu,d.wuli from stu left join (select student_id,score as riyu from stu where subject_id='日本語') a on stu.student_id=a.student_id
left join(select student_id,score as shuxue from stu where subject_id='数学') b on stu.student_id=b.student_id
left join(select student_id,score as yingyu from stu where subject_id='英语') c on stu.student_id=c.student_id
left join(select student_id,score as wuli from stu where subject_id='物理') d on stu.student_id=d.student_id
后面有多少项,可以接着加,所以问题出在有多少项必须是确定的

6 楼

最简单的是利用交叉表查询向导完成:行为student_id ,列为subject_id,数据区为score即可

7 楼

这是我的一条语句,测试通过。
select stuID,日语=
                  sum(case
                     when subject='日语' then score
                      else  null
                     end),             
          数学=
                  sum(case
                     when subject='数学' then score
                      else  null
                     end),
               物理=
           sum(case
                     when subject='物理' then score
                       else  null
                   end)
,
                化学=
            sum(case
                      when subject='化学' then score
                        else  null
                      end)
from stu
group by stuID

8 楼

楼住的这个标的主件是学号和课程
但是要查询的是按照学号来进行
语句不是那么复杂

我来回复

您尚未登录,请登录后再回复。点此登录或注册