如何生成这样一个查询结果(100分)

  • 主题发起人 主题发起人 fly555
  • 开始时间 开始时间
F

fly555

Unregistered / Unconfirmed
GUEST, unregistred user!




我在做一个学生成绩管理的程序。

相关的表的结构是这样的:
有一个学科表,
  学科编号   学科名称

  SX       数学

  YW       语文

有一个学生成绩表:

结构是这样的

学生编号  学生姓名  学科名称  分数
LYC     林益成 数学 98
LYC 林益成   语文  78
XL      刑路 体育 64


我想生成这样一个查询:

学生编号  学生姓名  数学  语文   总分数
LYC     林益成 98 78 176

(注意:因为林益成没有体育课,所以查询生成的林益成的记录就没有体育课)

用什么办法呢?(具体用什么SQL查询)
 



 
你如果配合EXCEL使用,这个问题就简单了
 
这样应该可以的
select 学生编号,学生姓名,数学+语文As总分数 from Tabel1,Tabel2
 
aggfunction 在选定数据上运作的 SQL 合计函数。
selectstatement SELECT 语句。
pivotfield 在查询的结果集中创建列标题时用的字段或表达式。
value1, value2 用来创建列标题的固定值。
说明

使用交叉表查询来摘要数据时,从指定的字段或表达式中选定值作为列标题,这样,可以用比选定查询更紧凑的格式来观察数据。
TRANSFORM 是可选的,但在使用它时,要作为 SQL 字符串中的第一个语句。它出现在 SELECT 语句(指定作为行标题的字段的)之前,还出现在 GROUP BY 子句(指定行分组的)之前。可以有选择地包含其它子句,例如 WHERE 子句,它指定附加的选择或排序条件。也可以将子查询当作谓词,特别是在叉表查询的 WHERE 子句中。

pivotfield 返回的值被用作查询结果集中的列标题。例如,在交叉表查询中,将根据销售图表按销售月份创建 12 个列。可以限制 pivotfield 用列在可选的 IN 子句中的固定值(value1, value2)来创建标题。也可以用没有数据存在的固定值来创建附加的列。

 
你这问题可以用SQL的CASE语句实现!
 
你必须动态生成查询语句,一条不变的查询语句不可能实现
 
我觉得用CASE一条语句可以实现,只不过长了点。我已经试过了!
 
SELECT 学生编号,学生姓名
MAX(CASE WHEN 学科名称='数学' THEN 分数 ELSE 0 END) AS 数学,
MAX(CASE WHEN 学科名称='语文' THEN 分数 ELSE 0 END) AS 语文,
MAX(CASE WHEN 学科名称='体育' THEN 分数 ELSE 0 END) AS 体育,
(MAX(CASE WHEN 学科名称='数学' THEN 分数 ELSE 0 END)+
MAX(CASE WHEN 学科名称='语文' THEN 分数 ELSE 0 END)+
MAX(CASE WHEN 学科名称='体育' THEN 分数 ELSE 0 END)) AS 总分
FROM 学生成绩表
Group By 学生编号,学生姓名
 
这种字段数量不定的查询实在是难做!!不过也不是没有办法!
可以使用存储过程,不过就是太烦琐了!
 
请问zhangyufly: 你的意思我不太懂,你可以具体说说如何实现吗?

还想问其他的人:学校的课程可不止这三门呀,
还要有地理,化学,物理,生物,等等太多了呀?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部