首页 > 解决方案 > 如何在 SQL Server 中合并两个表

问题描述

我有这两张表:

表格1

Date          Name         StudentID          TotalDuration
------------------------------------------------------------
2019-09-30    aA           11111              100
2019-09-30    bB           22222              40
2019-09-30    cC           33333              60
2019-10-07    aA           11111              50
2019-10-07    bB           22222              10
2019-10-07    cC           33333              12
2019-10-07    dD           44444              90

它包含参加讲座的学生的数据(因此,不包括未参加的学生。

表 2

StudentID          Surname         FirstName          Group
------------------------------------------------------------
11111              A               a                  1
22222              B               b                  1
33333              C               c                  1
44444              D               d                  2
55555              E               e                  2
66666              F               f                  2
77777              G               g                  3

表 2 包含班级中所有学生的数据。

表 1 中的 Name 属性是 surname + first name 的组合,TotalDuration 是学生参与的持续时间,以分钟为单位。

我想组合这两个表,以便列出班级中的所有学生及其 TotalDuration。

我试过OUTER JOINand UNION ALL,但不知道如何列出所有学生,但对于那些在特定日期没有参加讲座的学生显示 NULL 值。

我怎样才能做到这一点?

标签: sqljoingroup-bysum

解决方案


你可以left joingroup by。但是由于您只需要一个聚合计算,因此相关子查询可能是一种更简单、更有效的方法(如果您有正确的索引 - 见下文):

select 
    t2.*,
    (
        select sum(totalduration) 
        from table1 t1 
        where t1.studentid = t2.studentid
    ) totalduration
from table2 t2

对于性能,请考虑在table1(studentid, totalduration).

旁注:从数据库设计的角度来看,列Nameintable1是不需要的;这是冗余信息,使维护任务复杂化(如果有人更改另一个表中学生的名字怎么办?)。您应该删除该列,并仅依赖外键studentid


推荐阅读