Sybase SQL动态选择(联接?)关系数据库
我正在写一个网页,它以旧的成绩册格式显示学生的成绩,也就是说,它显示学生姓名,然后显示每个作业的分数(一行),然后每个学生重复一行。我的表格设置如下(缩短为必要信息): 表:分配Sybase SQL动态选择(联接?)关系数据库,sql,select,join,sybase,relational-database,Sql,Select,Join,Sybase,Relational Database,我正在写一个网页,它以旧的成绩册格式显示学生的成绩,也就是说,它显示学生姓名,然后显示每个作业的分数(一行),然后每个学生重复一行。我的表格设置如下(缩短为必要信息): 表:分配 *分配主键 *分配名称 表:学生 *学生主键(主键) *学生姓名 表:学生分配 *SA_PK(主键 *学生FK(学生.学生PK) *分配\u FK(分配.分配\u PK) *得分 我正在尝试编写一个SELECT语句,该语句将打印每个作业的学生姓名和分数。我遇到的问题是,如果我选择分数作为一列,我只能获得一个作业的分数,
*分配主键
*分配名称 表:学生
*学生主键(主键)
*学生姓名 表:学生分配
*SA_PK(主键
*学生FK(学生.学生PK)
*分配\u FK(分配.分配\u PK)
*得分 我正在尝试编写一个SELECT语句,该语句将打印每个作业的学生姓名和分数。我遇到的问题是,如果我选择分数作为一列,我只能获得一个作业的分数,因为在我的WHERE作业中,我的WHERE作业只允许我为一列选择一个分数
我对关系数据库相当陌生,我真的需要一些帮助来解决这个问题。一个建议是,我写一个SELECT语句,将所有学生选入一个表中,然后在表中的每一行做一个foreach,让它选择分数并将其放在适当的列中。这似乎是一个缓慢且不必要的过程。是否有更简单的方法使用联接?或编写更好的选择?这将为您获得所需的数据。然后您可以研究将其旋转到所需的显示格式,这在应用程序中可能比在数据库中更容易
SELECT s.Student_Name, a.Assignment_Name, sa.Score
FROM Student s
INNER JOIN StudentAssignment sa
ON s.Student_PK = sa.Student_FK
INNER JOIN Assignment a
ON sa.Assignment_FK = a.Assignment_PK
ORDER BY s.Student_Name, a.Assignment_Name
查找数据透视表。如果你提前知道作业的数量,那就容易多了…(这是一个很大的if)。PIVOT表正是我所需要的。我可以进行初始查询以提前获得分配的数量。Sybase没有内置PIVOT或TRANSFORM函数。相反,我必须加载所有数据,然后编写一个C#对象来读取数据,转换并以我想要的格式显示。PIVOT表本来可以工作如果Sybase支持的话,很明显。