2017-10-31 1 views
0

CSRエージェントの拡張機能を使用して番号を集計する必要のある質問があります。現在、1つのエージェントとそのエクステンションの1行/レコードが返されていますが、その1つのレコードの15人のエージェントすべてに対して正しい合計が表示されています。合計で1つのレコードだけではなく、グループ化して集計します

しかし、私が望むのは、各エージェントとその内線番号を、それぞれの日のそれぞれの合計でリストすることです。私は拡張子でグループ化していますが、問題を解決していないようです。

私のクエリには、エクステンション/エージェントごとに合計を壊さない理由がありますか?

SELECT firstn 
, lastn 
, extension 
, Recieved 
, RecievedKnown 
, Outbound 
, outboundKnown 
, Missed 
, MissedKnown 
, duration 
, HOLDTIMESECS 


    FROM (
    SELECT firstn 
    , lastn 
    , c.extension 
    , sum(CASE WHEN LEGTYPE1 = 2 AND ANSWERED = 1 THEN 1 ELSE 0 END) AS Recieved 
    , sum(case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as RecievedKnown 
    , sum(CASE WHEN ANSWERED = 1 AND LEGTYPE1 = 1 then 1 ELSE 0 end) AS Outbound 
    , sum(case when LEGTYPE1 = 1 and FINALLYCALLEDPARTYNO = k.phone_number then 1 ELSE 0 end) as outboundKnown 
    , sum(case when Answered = 0 then 1 ELSE 0 end) as Missed 
    , sum(case when ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as MissedKnown 
    , sum(b.duration) as duration 
    , sum(a.holdtimesecs) as holdtimesecs 


    FROM ambition.session a 
    INNER JOIN ambition.callsummary b ON a.NOTABLECALLID = b.NOTABLECALLID 
    right join jackson_id.users c on a.callingpartyno = c.extension or a.finallycalledpartyno = c.extension 
    LEFT JOIN ambition.known_numbers k ON a.callingpartyno = k.phone_number 
    WHERE a.ts >= curdate() 

    and(a.CALLINGPARTYNO in (select extension from ambition.ambition_users) OR a.finallycalledpartyno IN (select extension from ambition.ambition_users)) 
) x 
    group by extension; 
+0

ヒント:あなたのグループは合計を計算するクエリの範囲外です。 –

答えて

2

GROUP BY句がサブクエリ内に必要です。また、あなたはFROM jackson_id.users cを使って正しい参加を避けることができると思います。また、あなたはambition.known_numbers kにjoinを残していますが、大文字と小文字の表現の多くは、そのテーブルのnull以外の値に依存しています。結合は内部結合でなければなりません。そうでなければ、それらのケース式の中のそのテーブルからNULLを得る必要があります。個人的に

SELECT 
     firstn 
     , lastn 
     , extension 
     , Recieved 
     , RecievedKnown 
     , Outbound 
     , outboundKnown 
     , Missed 
     , MissedKnown 
     , duration 
     , HOLDTIMESECS 
FROM (
     SELECT 
       firstn 
      , lastn 
      , c.extension 
      , sum(CASE WHEN LEGTYPE1 = 2 AND ANSWERED = 1 THEN 1 ELSE 0 END) AS Recieved 
      , sum(case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as RecievedKnown 
      , sum(CASE WHEN ANSWERED = 1 AND LEGTYPE1 = 1 then 1 ELSE 0 end) AS Outbound 
      , sum(case when LEGTYPE1 = 1 and FINALLYCALLEDPARTYNO = k.phone_number then 1 ELSE 0 end) as outboundKnown 
      , sum(case when Answered = 0 then 1 ELSE 0 end) as Missed 
      , sum(case when ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as MissedKnown 
      , sum(b.duration) as duration 
      , sum(a.holdtimesecs) as holdtimesecs 
     FROM jackson_id.users c 
     INNER JOIN ambition.session a on c.extension = a.callingpartyno or c.extension = a.finallycalledpartyno 
     INNER JOIN ambition.callsummary b ON a.NOTABLECALLID = b.NOTABLECALLID 
     LEFT JOIN ambition.known_numbers k ON a.callingpartyno = k.phone_number 
     WHERE a.ts >= curdate() 
       AND(a.CALLINGPARTYNO in (select extension from ambition.ambition_users) 
       OR a.finallycalledpartyno IN (select extension from ambition.ambition_users) 
       ) 
     GROUP BY 
       firstn 
      , lastn 
      , c.extension 
    ) x 
; 

そのシーケンスが堅調ないかもしれないと私はシーケンス(A、B、C ...)に依存している表の別名に熱心たことはありません。代わりに、私はこれが可能な場合には、各単語の最初の文字を好むでしょう。ユーザー= u、callsummary = cs、セッション= s、known_numbers = knなど

+0

ありがとう、これは素晴らしい動作するようです!そのエイリアスポリシーも使用します。これは非常に役立ちます –

関連する問題