2016-11-20 63 views
1

我有2个视图,一个持有入站呼叫和其他出站呼叫。我希望我的查询能够加入2个视图,以便每个运营商(目的地名称和始发名称)并排站立和进站。目前我的当前查询重复了一半的连接,在入站下面的例子中。查询加入的2个视图 - 一半正在复制的答案

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,还需要加入YearMonth。如果视图每个不同的目标名称,年份和月份都有一行,那么您也可以删除GROUP BY

其次,假设您希望在某个月只有传入但不传出数据(反之亦然)时需要结果,则可能需要FULL JOIN而不是INNER JOIN

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 ; 
+0

哇,这正是我想要的,在我的生命中花了一个星期,我永远不会回来!非常感谢。 – Eggchaser

-1

如果我正确理解你想输出是这样的:

DestinationName Inbound Outbound Year Month 
Accounts Spare  9   87 2016 8 

在这种情况下,我觉得你越来越重复的原因是因为你被o.volumeout和i.volumein分组。

如果你想每个月和每年的单行,那么你可以按照目标名,蒙特和年组来分组,然后通过使用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 
+0

请向OP和未来的读者解释您的解决方案需要什么。只有代码和*尝试这个*不鼓励。 – Parfait

+0

谢谢你在帮助Ed方面的努力,不幸的是这仍然造成了重复。再次感谢 – Eggchaser