我有2个视图,一个持有入站呼叫和其他出站呼叫。我希望我的查询加入2个视图,以便每个运算符(destinationname和origininationname)并排显示入站和出站。目前,我的当前查询重复了连接的一半,在入站下面的示例中。
SELECT i.destinationname, i.volumein as inbound, o.volumeout as outbound,
i.year, i.month
FROM InboundCalls i
inner join OutboundCalls o
on i.destinationname = o.originationname
GROUP BY i.year, i.month, i.destinationname, o.volumeout, i.volumein
DestinationName Inbound Outbound Year Month
Accounts Spare 9 33 2016 8
Accounts Spare 9 9 2016 8
Accounts Spare 9 7 2016 8
Accounts Spare 9 38 2016 8
Accounts Spare 21 33 2016 9
Accounts Spare 21 9 2016 9
Accounts Spare 21 7 2016 9
Accounts Spare 21 38 2016 9
我正在寻找的结果将类似于以下内容;
DestinationName Inbound Outbound Year Month
Accounts Spare 84 210 2016 9
Accounts Spare 12 32 2016 11
Accounts Spare 36 103 2016 10
Steve Jones 36 96 2016 8
Wayne Rooney 162 172 2016 8
Alan Shearer 1 216 2016 9
Alan Shearer 74 82 2016 8
如果需要澄清,请告诉我。
答案 0 :(得分:0)
错误结果的原因是您只加入目的地名称,而不是年月和月份。
首先,您不仅需要加入DestinationName
,还需加入Year
和Month
。如果视图每个不同的目标名称,年份和月份都有一行,那么您也可以删除GROUP BY
。
其次,你可能需要一个FULL JOIN
而不是INNER JOIN
,假设你想要的结果只有Incoming而不是Outgoing数据(反之亦然)一个月。
SELECT
COALESCE(i.destinationname, o.destinationname) AS DestinationName
COALESCE(i.volumein, 0) AS InBound,
COALESCE(o.volumeout, 0) AS OutBound,
COALESCE(i.year, o.year) AS Year,
COALESCE(i.month, o.month) AS Month
FROM InboundCalls AS i
FULL JOIN OutboundCalls AS o
ON i.destinationname = o.originationname
AND i.year = o.year
AND i.month = o.month ;
答案 1 :(得分:-1)
如果我理解正确,你会希望输出为:
DestinationName Inbound Outbound Year Month
Accounts Spare 9 87 2016 8
在这种情况下,我认为您获得重复的原因是因为您正在通过o.volumeout和i.volumein进行分组。
如果您想要每个月和每年使用一行,那么您可以按目的地名称,mont和year进行分组,然后使用SUM来获取总数。
SELECT i.destinationname, sum(i.volumein) as inbound, sum(o.volumeout) as outbound,
i.year, i.month
FROM InboundCalls i
inner join OutboundCalls o
on i.destinationname = o.originationname
GROUP BY i.year, i.month, i.destinationname