【发布时间】:2015-01-23 14:11:39
【问题描述】:
我正在尝试根据 StudentId 和 MarksTypeId 行数查找每个学生的总分。
我有 3 张桌子
MarksType
----------------------------------
MarksTypeId | MarkType | Marks
----------------------------------
1 | Writing | 10
2 | Drawing | 30
3 | Singing | 20
----------------------------------
Students
--------------------------------
StudentId | Name | Address
--------------------------------
1 | John | USA
2 | Raja | India
3 | Paul | AUS
--------------------------------
MarksDetails -- Has two foreign keys
-------------------------------------------------------
MarksDetailsId | MarksTypeId | StudentId | Date
-------------------------------------------------------
1 | 3 | 1 | 18 jan
2 | 3 | 1 | 18 jan
3 | 1 | 3 | 19 jan
-------------------------------------------------------
这是我想要的结果:
------------------------------------
StudentId | Name | Total Marks
------------------------------------
1 | John | 40
2 | Raja | 0
3 | Paul | 10
------------------------------------
我的意思是如果约翰每天唱歌两次,那么使用 StudentId 和 MarksTypeId,我需要他的总分数作为结果。
到目前为止,我做了以下事情:
select Sum(MarksType.Marks) from MarksType inner join MarksDetails on MarksType.MarksTypeId=1
但总和返回错误的总数,
更新的其他尝试:
-
这会导致每个学生 ID 的总行数
select MarksDetails.StudentId , COUNT(MarksDetails.StudentId ) as count from MarksDetails group by MarksDetails.StudentId -
这会产生 Marks,带有 studentid 和 tagstypeid
select MarksType.Marks, MarksType.MarksTypeId , MarksDetails.StudentId from MarksType inner join MarksDetails on MarksType.MarksTypeId = MarksDetails.StudentId
我可以知道我做错了什么吗? 任何帮助都会很棒。
【问题讨论】:
-
因为您将结果限制为 MarksDetailId=1。你为什么这样做?
-
你也没有正确加入并且缺少第三张表
-
你也需要有一个group by。
-
我不认为
LoayaltyPoints_T.MarksTypeId = MarksDetails.StudentId这是平等的。 -
如果我编辑它,你什么也学不到。您需要所有三个表才能正常工作吗?首先获取查询中的所有三个表,然后您只需要获取 MarksType 的总值。
标签: sql-server join count sum