当前位置: 首页 > 知识库问答 >
问题:

使用唯一记录作为表头

楚钊
2023-03-14
    null

_______________________________________________________________________________________________________________________________________________________________________________________________________
__student3______95_____92_____97__
__student4______97_________91___

学生姓名来自学生表
科目1,科目2,科目来自科目表的唯一记录
,然后
成绩表

是可能的还是我的数据库模式设计不好?

以下是表记录

Student table
|student_id | student_name|
|     1     |   student1  |
|     2     |   student2  |
Subject table
|subject_id | subject_name|
|     1     |   subject1  |
|     2     |   subject2  |
|     3     |   subject3  | 
Grade table
| grade_id | grade | subject_id | student_id |
|     1    |   87  |     1      |     1      |
|     2    |   87  |     2      |     1      |
|     3    |   87  |     3      |     1      |
|     4    |   87  |     1      |     2      |
|     5    |   87  |     2      |     2      |
|     6    |   87  |     3      |     2      |

共有1个答案

沈永新
2023-03-14

一般的SQL方法是使用条件聚合:

select s.studentName,
       max(case when s.subjectName = 'subject1' then g.grade end) as Subject1,
       max(case when s.subjectName = 'subject2' then g.grade end) as Subject2,
       max(case when s.subjectName = 'subject3' then g.grade end) as Subject3
from (students s join
      grades g
      on s.student_id = g.student_id
     ) join
     subjects su
     on g.subject_id = su.subject_id
group by s.studentid, s.studentName;

一些数据库还支持pivot语法来完成此操作。

编辑:

select s.studentName,
       max(iif(s.subjectName = 'subject1', grade,  NULL)) as Subject1,
       max(iif(s.subjectName = 'subject2', grade,  NULL)) as Subject2,
       max(iif(s.subjectName = 'subject3', grade,  NULL)) as Subject3
from students s inner join
     grades g
     on s.student_id = g.student_id inner join
     subjects su
     on g.subject_id = su.subject_id
group by s.studentid, s.studentName;
 类似资料:
  • 问题内容: 我在SQL Server输出中有一个查询, 假设我有一个具有某些字段的表(Ex.StudentMaster)-没有唯一约束。对于前 RollNumber和Name该表具有相同的数据。例如: 我只想获得第三条记录。如何识别此唯一记录? 问题答案: 任何一行都是第三行:-) 删除“第三”行:-) 删除最后一行:

  • 我有一个包含用户及其密码的数据库。当我启动应用程序时,我会创建一些具有角色的用户,并将其存储到数据库中。我的用户实体: 和用户角色实体 默认情况下,列角色是唯一的=false,但当我添加userA与角色:管理员,用户,然后userB与角色:用户,记录userB-用户覆盖记录userA-用户。有人能指出我的错误是什么吗? 我正在使用hibernate 5 spring 5

  • 我有两张桌子: 表1: 如果两个表都有类似“city”的列,例如 城市 ========== 伦敦 伦敦 伦敦 巴黎 巴黎 纽约 解决方案会是什么样子???

  • 问题内容: 我想在服务器中使用列作为表 但这出错了 当我将的类型更改为varchar时..它起作用了! 你能告诉我是否可以使文本列为 问题答案: 基本上,您不能将列用作键。因为实际上这么大的列将不是唯一的,并且可能会出现更多重复的情况。因此,寻找方法并将该输出用作UNIQUE约束。 希望这对您有帮助

  • 我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。 我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@Embe

  • 我正在创建一个包含一个用户实体的Spring Boot应用程序。 我想实现一个功能,管理员可以使用不同的过滤器搜索用户,过滤器可以是用户表中的一列或多列。 下面是用户实体类: 搜索用户时,只有名字可以是筛选器,或者在某些时候,名字和姓氏都可以是筛选器,或者如果需要,其他一些列值(ID、电子邮件和联系人)也可以与它们一起用作筛选器。筛选器的选择将完全是管理员在运行时的选择。 有人能指导我如何使用JP