如何将两个不同的 table 合并并合计为第三个 table
How to join and total two different tables into a third table
我有两个 table 有数据,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
我想要完成的是创建第三个 table 将这两个连接在一起,JoinedCalls
,并且每个 [=] 的总数为 AllCalls
和 RecordedCalls
18=]、System
和 GroupID
。挑战之一是 GroupID
特定于 System
,因此存在多个 GroupID = 1
、GroupID = 2
等。此外,InboundCalls I
有 OutboundCalls O
没有的附加列,VDN
和 VDNName
。可以有多个 GroupID 接听来自 VDN 275001 的呼叫,以及来自由同一 GroupID 处理的多个 VDN 的呼叫。我需要计算日期 01/08/2015、系统 1 和 GroupID 1 的所有调用。然后计算日期 01/08/2015、系统 1、GroupID 2 的所有调用。然后是日期 01/08/2015,系统2、GroupID 1。以此类推。
我知道我需要从查询中省略 VDN 和 VDNName,因为它不存在于两个 table 中。我已经尝试了两次选择和 UNION ALL
,但似乎我得到了日期、VDN 和 GroupID 的每个组合的行,即使我没有选择 VDN。我也在使用 GROUP BY
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
我有两个 table 有数据,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
我想要完成的是创建第三个 table 将这两个连接在一起,JoinedCalls
,并且每个 [=] 的总数为 AllCalls
和 RecordedCalls
18=]、System
和 GroupID
。挑战之一是 GroupID
特定于 System
,因此存在多个 GroupID = 1
、GroupID = 2
等。此外,InboundCalls I
有 OutboundCalls O
没有的附加列,VDN
和 VDNName
。可以有多个 GroupID 接听来自 VDN 275001 的呼叫,以及来自由同一 GroupID 处理的多个 VDN 的呼叫。我需要计算日期 01/08/2015、系统 1 和 GroupID 1 的所有调用。然后计算日期 01/08/2015、系统 1、GroupID 2 的所有调用。然后是日期 01/08/2015,系统2、GroupID 1。以此类推。
我知道我需要从查询中省略 VDN 和 VDNName,因为它不存在于两个 table 中。我已经尝试了两次选择和 UNION ALL
,但似乎我得到了日期、VDN 和 GroupID 的每个组合的行,即使我没有选择 VDN。我也在使用 GROUP BY
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