繁体   English   中英

基于多个条件循环遍历表

[英]Loop through a table based on multiple conditions

学生桌

student_id  student_name
1           John
2           Mary

成绩表

student_id   year   grade_level  school        Course    Mark
  1          2015    10          Smith High     Algebra   95
  1          2015    10          Smith High     English   96
  1          2016    11          Smith High     Geometry  85
  1          2016    11          Smith High     Science   88
  2          2015    10          Smith High     Algebra   98
  2          2015    10          Smith High     English   93
  2          2016    11          Smith High     Geometry  97
  2          2016    11          Smith High     Science   86

我正在尝试显示每年的结果以及学生在该年级上的课程。

所以我正在寻找的最终输出是这样的:

[student_id1] [year1] [grade1] [school1]
[course1] [mark1]
[course2] [mark2]
[course3] [mark3]...
[student_id1] [year2] [grade2] [school1]
[course1] [mark1]
[course2] [mark2]
[course3] [mark3]...
[student_id2] [year1] [grade1] [school1]
[course1] [mark1]
[course2] [mark2]
[course3] [mark3]...

这将全部放在一列/行中。 所以在这个特定的例子中,这将是我的结果:

1 2015 10 Smith High 
Algebra 95
English 96
1 2016 11 Smith High 
Geometry 85
Science 88
2 2015 10 Smith High 
Algebra 98
English 93
2 2016 11 Smith High 
Geometry 97
Science 86

因此,每当学生 ID、年份、年级或学校名称发生变化时,我都会为此设置一行并循环浏览该组内的课程。 所有这些都将在一列/行中。

这是我到目前为止所拥有的,但我不确定如何正确循环每个小组的课程和成绩。 如果我能指出正确的方向,我将不胜感激。

select s.student_id + '' + year + '' + grade_level + '' + school 
from students
join grades on students.student_id = grades.student_id

您正在尝试将展示与从数据库表中检索数据混合在一起。 可以通过游标实现循环遍历 sql 中的结果集,但不建议这样做。 您最好使用两个查询提取所需的数据,然后使用您选择的语言打印它。

如果您想在 SQL 环境中执行此操作,则取决于您使用的数据库管理系统。

例如,如果您使用的是 Transact SQL,则可以尝试查看此链接

通常,这种循环和交互是在与 SQL DB 耦合的编程语言中完成的。

无论如何,如果您真的想在 SQL 中执行此操作,您应该查看存储过程和游标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM