Sql 如何将两个不同的表合并到第三个表中

Sql 如何将两个不同的表合并到第三个表中,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有两个数据表,InboundCalls和OutboundCalls,如下所示: InboundCalls I Date System VDN VDNName GroupID GroupName AllCalls RecordedCalls 01/08/2015 1 2750001 Sales 1 AllUsers 50 49 01/08/2015 1 2

我有两个数据表,
InboundCalls
OutboundCalls
,如下所示:

InboundCalls I
Date        System    VDN      VDNName    GroupID    GroupName   AllCalls    RecordedCalls
01/08/2015  1         2750001  Sales      1          AllUsers    50          49
01/08/2015  1         2750001  CustServ   1          AllUsers    25          25
01/08/2015  1         2750001  CustServ   2          Supervisors 10          9
01/08/2015  2         2851234  Payments   1          AllUsers    30          29

OutboundCalls O
Date        System    GroupID    GroupName    AllCalls    RecordedCalls
01/08/2015  1         1          AllUsers     65          65
01/08/2015  1         2          Supervisors  20          19
01/08/2015  2         1          AllUsers     30          30
我试图完成的是创建第三个表,将这两个表连接在一起,
JoinedCalls
,以及每个
日期
系统
组ID
的总计
所有调用
记录调用
。挑战之一是
GroupID
特定于
系统
,因此存在多个
GroupID=1
GroupID=2
,等等。另外,
InboundCalls I
还有
OutboundCalls O
没有的附加列、
VDN
VDNName
。可以有多个GroupID接受来自VDN 275001的呼叫,也可以有多个VDN的呼叫由同一GroupID处理。我需要合计日期为2015年8月1日、系统1和GroupID 1的所有通话。然后合计日期为2015年8月1日、系统1、组ID 2的所有呼叫。日期为2015年8月1日,系统2,组ID 1。等等

我知道我需要在查询中省略VDN和VDNName,因为这两个表中都不存在。我尝试了两次选择和
UNION ALL
,但似乎我得到了Date、VDN和GroupID的每个组合的行,即使我没有选择VDN。我还使用了
groupby
Date、System、GroupID,所以我想它会将它们结合起来。编辑:我也尝试过使用SUM(I.AllCalls+O.AllCalls)、SUM(I.RecordedCalls+O.RecordedCalls),但这导致两者的计数都非常高

上述样本数据的期望输出:

JoinedCalls J
Date        System    GroupID    GroupName    AllCalls    RecordedCalls
01/08/2015  1         1          AllUsers     140         139
01/08/2015  1         2          Supervisors  30          28
01/08/2015  2         1          AllUsers     60          59
我自学了SQL,这意味着我的知识肯定有很大的差距。如果需要更多信息,请告诉我,并提前感谢您的帮助

试试这个:

create table InboundCalls (
    [Date] date,       
    [System] int,    
    VDN int,     
    VDNName varchar(50),   
    GroupID int,    
    GroupName varchar(50),  
    AllCalls int,    
    RecordedCalls int
);

create table OutboundCalls (
    [Date] date,       
    [System] int,      
    GroupID int,    
    GroupName varchar(50),  
    AllCalls int,    
    RecordedCalls int
);

insert into InboundCalls (
[Date], [System], VDN, VDNName, GroupID, GroupName, AllCalls, RecordedCalls) 
values
('01/08/2015', 1, 2750001, 'Sales', 1, 'AllUsers', 50, 49),
('01/08/2015', 1, 2750001, 'CustServ', 1, 'AllUsers', 25, 25),
('01/08/2015', 1, 2750001, 'CustServ', 2, 'Supervisors', 10, 9),
('01/08/2015', 2, 2851234, 'Payments', 1, 'AllUsers', 30, 29);

insert into OutboundCalls (
[Date], [System],  GroupID, GroupName, AllCalls, RecordedCalls) values
('01/08/2015',  1, 1, 'AllUsers', 65, 65),
('01/08/2015',  1, 2, 'Supervisors', 20, 19),
('01/08/2015',  2, 1, 'AllUsers', 30, 30);

select [date]
, [system]
, groupid
, groupname
, sum (allcalls) [allcalls]
, sum(recordedcalls) [recordedcalls]
from (
    select [date], [system], groupid, groupname, allcalls, recordedcalls
    from inboundcalls
    union all
    select [date], [system], groupid, groupname, allcalls, recordedcalls
    from outboundcalls
) as t
group by [date], [system], groupid, groupname;
结果

date        system  groupid groupname   allcalls    recordedcalls
-----------------------------------------------------------------
2015-01-08  1       1       AllUsers    140         139
2015-01-08  1       2       Supervisors 30          28
2015-01-08  2       1       AllUsers    60          59

只需添加
GroupName
,它就被设置好了。这似乎和我预期的完全一样。我需要做一些数据验证和检查其他答案张贴。感谢您的快速响应和全面回答!