Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sybase SQL动态选择(联接?)关系数据库_Sql_Select_Join_Sybase_Relational Database - Fatal编程技术网

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支持的话,很明显。