sql检索问题(50分)

  • 主题发起人 主题发起人 winger2000
  • 开始时间 开始时间
W

winger2000

Unregistered / Unconfirmed
GUEST, unregistred user!
已知表a
学生编号(bh) 课程(kc) 成绩(cj)
001 数学 100
001 语文 80
002 数学 90
002 语文 70
如何得到检索每个学生的课程成绩
学生编号(bh) 数学 语文
001 100 80
002 90 70
 
行列转换的问题,我的做法是在存储过程中建立临时表(就是你要得到的检索),然后取数据,
下面是一个实现的思路。UpDate的语句可能不正确。你找个SQL的参考看看
INSERT INTO TmpTable (学生编号, 数学)
SELECT 学生编号,成绩
FROM a
where 课程 = '数学'

Update TmpTable set 语文 =
(SELECT 成绩
FROM a
where a.课程 = '语文' and a.学生编号 = tmpTable.学生编号)

select * form tmpTable


 
关键是你用什么数据库?
oracle和sql server是不一样的。
 
必须使用临时表
 
liujunzhang:
可不一定哦,这无非是一个交叉表而已,erp系统中非常常见,
可能需要两次查询,但绝对可以不用临时表的。
 
sqlserver
select bh,sum(case when sum(case when kc='数学'then cj else 0 end)as 数学, end)as 数学,
sum(case when kc='语文'then cj else 0 end)as语文
from tabname
group by bh
access
sum(iif(kc='数学',cj,0)
 
同意Ugvanxk的用法,这才是sql语句高手。
 
好是好,但是有无考虑效率方面的问题?
 
谢谢大家,请大家都提供一些这样的实际例子,互相学习提高。
 
后退
顶部