2016-11-20 1 views
1

2つのビューに1つの着信コールと1つの着信コールがあります。私は自分のクエリを2つのビューに結合して、各オペレータ(destinationnameとoriginationname)のインバウンドとアウトバウンドが並んでいるようにしたい。現時点では、現在のクエリは結合の半分を複製します。参加の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にも参加する必要があります。ビューに別々の宛先名、年、月ごとに1つの行がある場合は、GROUP BYも削除できます。

第2に、着信のみがあり、発信データがない場合(またはその逆の場合)、結果が欲しいと仮定して、INNER JOINの代わりにFULL 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によってグループ化されているので、あなたが重複を得ている理由があると思います。

月と年を1行にする場合は、destinationame、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 
+0

あなたの解決策が何を意味するのかをOPと今後の読者に説明してください。コードのみと*これを試してください*はお勧めしません。 – Parfait

+0

エドの助けを借りてくれてありがとう、残念ながら、これはまだ重複を作成しました。しかし、もう一度お礼します。 – Eggchaser

関連する問題