2

コールセンター用に独自のレポート/統計ページを作成しようとしています...

Table 1 (agent)
CODE....NAME
AXA     apple bottom
AXB     apple pear

Table 2 (stat)
AGENT.....CAMPAIGN....CALLS....PITCHES.....TALKTIME......dialdate 
AXA       CCC         5        2           90(sec)       2-2-2013
AXA       DDD         5        2           20(sec)       2-2-2013 
AXB       DDD         1        1           20(Sec)       2-2-2013

Table 3 (result_CCC)
AGENTID.....lcdate......samount.....upamt......termcd
AXA         2-2-2013    $10         $5         SA

Table 4 (result_DDD)
AGENTID.....lcdate......samount.....upamt......termcd
AXA         2-2-2013    $0          $0         BN
AXB         2-2-2013    $0          $0         NI

次のようにテーブルを表示したい

Agent Name  ---  Calls ---- Pitches --- talktime --- samount --- upamt
Apple Bottom     10         4           110(sec)     $10         $5

ただし、コールはその日に行われたすべてのコールの合計である必要があります (キャンペーンだけでなく、TERMCD に関連付けられていない) が、ピッチはその日に行われたすべてのピッチの合計でなければなりません (キャンペーンだけでなく、TERMCD に関連付けられていない)ただし、talktime はその日に行われたすべてのトーク時間の合計でなければなりません (キャンペーンだけでなく、TERMCD に関連付けられていない) samount はすべての termcd = SA の合計でなければなりません。その日だけの SA upamt はすべての termcd = の合計でなければなりません。当日限りSA

これは私が現在使用している文字列ですが、まだいくつかの項目がありません:

SELECT agent.name, stats.agent, SUM(stats.calls) AS sumcalls, SUM(stats.pitches) AS     sumpitches, SUM(stats.talktime) AS sumtalktime, SUM(stats.wrapuptime) as sumwrapuptime, SUM(stats.dialtime) as sumdialtime, (SUM(stats.wrapuptime) + SUM(stats.talktime) + sum(stats.dialtime)) as sumtotal
FROM dbo.stats 
     INNER JOIN dbo.agent ON agent.code = stats.agent
WHERE (stats.agent !='' and stats.dialdate = '".($_GET['datetime'])."') and (stats.campaign = '".($_GET['camp_select'])."' or stats.campaign = '')
GROUP BY agent.name, stats.agent
ORDER BY SUM(stats.talktime) ASC";

これに関する私の懸念は、WHERE termcd = 'SA' を追加し始めると、コール、ピッチ、トークタイムなども変更されることですが、それらの列は TERMCD = 'SA' の影響を受ける必要はありません。関数。

誰でも光を当てることができますか?

4

1 に答える 1

0

条件付きの合計が必要です:

select . . .
       sum(case when termcd = 'SA' then samount end) as sa,
       sum(case when termcd = 'SA' then upamount end) as up
. . .

つまり、where句の条件でフィルタリングしないでください。ロジックを条件付き合計として入れるだけです。

于 2013-02-25T22:28:25.267 に答える