2017-12-22 18 views
0

以下のクエリはデータを取り込んで 'レポート'を作成しますが、基本的には CSRエージェントによってグループ化された数値の行項目です。それが正確で正確であり、クエリの後に結果をCSVとして保存します。しかし、 それは私に個々のレコードを与えているだけなので、それをExcelに入れ、数式を使って 「合計」行を挿入して、合計する必要がある列を基本的に合計しなければなりません。csv/excelレポートのSQLクエリで合計/行を作成する

このsqlクエリはPHPスクリプトで実行されますが、私は を各ユーザの合計することができるように、これを変更する最善の方法は不明です。これは何らかの形で「これはユーザー7200 のレコードの終わりなので、ユーザー7200の合計行を挿入してから、ユーザー7206のレコードまたはそのようなものへ移動する必要があります。

スクリーンショットは、「x」と1または0の代わりにヌルスペースを使用してレポートをそのまま表示するので、私のExcelの公式では 私はカウント "IF"変数を使用しています。私はこのスクリプトと似たようなことができることを期待しています。クエリと のスクリーンショットは次のとおりです。ここで

はフィドルです:フィドルのhttp://sqlfiddle.com/#!9/b6a568/1

出力は正確なクエリの出力である、唯一の違いは、スクリプトは、CSVにそれを置くです。

「x」の数を合計する「合計」行を作成する方法があり、継続時間と保留時間の秒数を にすることができます。

私がこれをどのようにリファクタリングできるかについてのご意見は大変ありがとうございます。

$result = mysqli_query($conn2, 
    "SELECT 
      FirstN 
      , LastN 
     , Extension 
     , Recieved 
     , Recieved_Known 
     , Outbound 
     , Outbound_Known 
     , Missed_No_VM 
     , Missed_VM 
     , Missed_Known 
     , Calling_Number 
     , Called_Number 
     , Start_Time 
     , End_Time 
     , Talk_Time_Seconds 
     , Hold_Time_Seconds 

     FROM (
      SELECT distinct 
      firstn 
      , lastn 
      , c.extension 
      , CASE WHEN LEGTYPE1 = 2 AND ANSWERED = 1 THEN 'x' ELSE '' END AS Recieved 
      , case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as Recieved_Known 
      , CASE WHEN LEGTYPE1 = 1 then 'x' ELSE '' end AS Outbound 
      , case when FINALLYCALLEDPARTYNO = kn.long_number then 'x' ELSE '' end as Outbound_Known 
      , case when legtype1 = 2 and answered = 0 and finallycalledpartyno not like '%oice%' then 'x' ELSE '' end as Missed_No_VM 
      , case when finallycalledpartyno like '%oice%' then 'x' ELSE '' end as Missed_VM 
      , case when legtype1 = 2 and ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as 
      Missed_Known 
      , a.CALLINGPARTYNO AS Calling_Number 
      , a.FINALLYCALLEDPARTYNO AS Called_Number 
      , b.starttime as Start_Time 
      , b.endtime as End_Time 
      , b.duration as Talk_Time_Seconds 
      , a.holdtimesecs as Hold_Time_Seconds 

      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 
     left join ambition.known_numbers kn on a.finallycalledpartyno = kn.long_number 
       WHERE a.ts >= '2017-12-07' -- curdate() 
       and(a.CALLINGPARTYNO in (select extension from ambition.ambition_users) OR a.finallycalledpartyno IN (select extension from ambition.ambition_users)) 
     ) x 
      order by extension;") or die(mysqli_error($conn2)); 

良い測定のためのスクリーンショット:

enter image description here

答えて

1

私はあなたがユーザーを一意に識別しないかを確認していません。私は、その拡張子が各ユーザーに固有のものと仮定しています。私は次のクエリを考え出すことに基づく:

SELECT 
      Extension 
     , Recieved 
     , Recieved_Known 
     , Outbound 
     , Outbound_Known 
     , Missed_No_VM 
     , Missed_VM 
     , Missed_Known 
     , Talk_Time_Seconds 
     , Hold_Time_Seconds 

     FROM (
      SELECT distinct 
      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 Recieved_Known 
      , sum(CASE WHEN LEGTYPE1 = 1 then 1 ELSE 0 end) AS Outbound 
      , sum(case when FINALLYCALLEDPARTYNO = kn.long_number then 1 ELSE 0 end) as Outbound_Known 
      , sum(case when legtype1 = 2 and answered = 0 and finallycalledpartyno not like '%oice%' then 1 ELSE 0 end) as Missed_No_VM 
      , sum(case when finallycalledpartyno like '%oice%' then 1 ELSE 0 end) as Missed_VM 
      , sum(case when legtype1 = 2 and ANSWERED = 0 and CALLINGPARTYNO = k.phone_number then 1 ELSE 0 end) as 
      Missed_Known 
      , sum(b.duration) as Talk_Time_Seconds 
      , sum(a.holdtimesecs) as Hold_Time_Seconds 

      FROM session a 
     INNER JOIN callsummary b ON a.NOTABLECALLID = b.NOTABLECALLID 
     right join users c on a.callingpartyno = c.extension or a.finallycalledpartyno = c.extension 
     LEFT JOIN known_numbers k ON a.callingpartyno = k.phone_number 
     left join known_numbers kn on a.finallycalledpartyno = kn.long_number 
      WHERE a.ts >= '2017-12-07' -- curdate() 
      and(a.CALLINGPARTYNO in (select extension from ambition_users) OR a.finallycalledpartyno IN (select extension from ambition_users)) 
     group by c.extension  
    ) x 

      order by extension; 

上記のクエリを、少なくとも、あなたの問題を解決する方法についていくつかのアイデアを与えるだろう。

+0

私はこれが私に別々に合計を与えることがわかります。あなたは私がこれらのレコードを挿入する方法があるかどうか知っていますか?例えば、ユーザーのための単一のレコードを、次にこの行ですか?または何も私は両方の1つのCSVに何らかの形で挿入する可能性があります –

+0

これ以上について考えると、私は単一のレコードの周りにforeachループを使用し、ユーザーIDに基づいて合計を挿入することを望むだろう。私はちょうどここに到達していますが、私はそれをもう少し考えなければなりません。 –

+1

私はあなたの要求を適切に得られないと思います。しかし、私は単一のクエリを使用してこれを行う方法はわかりません。 –

関連する問題