我正在编写一个网页,以旧的成绩簿格式显示学生成绩,也就是说,它会显示学生姓名,然后显示每个作业的成绩(连续)然后为每个学生重复一行。我的表设置如下(缩短到必要的信息):Sybase SQL动态选择(加入?)关系数据库
表:分配
* Assignment_PK(主键)
* ASSIGNMENT_NAME
表:学生
* Student_PK(主键)
* Student_Name
表:StudentAssignment
* SA_PK(主键
* Student_FK(Student.Student_P K)
* Assignment_FK(Assignment.Assignment_PK)
*分数
我试图写一个SELECT语句,将打印学生的名字和分数每项任务。我遇到的问题是,如果我将SELECT Score列作为列,我只能得到一个赋值的分数,因为在我的WHERE Assignment_FK = Assignment_PK中只允许我为列选择一个分数。
我对关系型数据库相当陌生,我真的可以用最好的方式来解决这个问题。一个建议是,我编写了一个SELECT语句,将所有学生选入一个表格,然后在表格中做一个foreach行,并让它选择分数并将它们放在适当的列中。这似乎是一个缓慢而不必要的过程。有没有更简单的方法使用JOINS?或者写一个更好的SELECT?
查找PIVOT表。如果你事先知道分配的数量,这很容易......(这是一个大的IF)。 – Randy 2011-04-05 18:06:38
一个PIVOT表正是我所需要的。我可以做一个初步的查询,以提前获得分配的数量。 Sybase没有内置的PIVOT或TRANSFORM功能。相反,我必须加载所有数据,然后编写一个C#对象来读取数据,并以我想要的格式进行转换和显示。如果Sybase支持它,那么一个PIVOT表可以很好地工作。 – Genzume 2011-04-11 19:10:03