【问题标题】:fetching data from multiple tables, mssql, php, apache从多个表、mssql、php、apache 中获取数据
【发布时间】:2013-02-11 04:24:14
【问题描述】:

希望为我们的呼叫中心创建我自己的报告/统计页面...

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 无关) 但通话时间必须是当天所有通话时间的总和(不仅仅是竞选活动,也与 TERMCD 无关) samount 必须是当天所有 termcd = 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' 函数。

谁能解释一下?

【问题讨论】:

  • 抱歉,不知道如何格式化我的表格以使表格看起来更好读。
  • 您能否在此处创建标签示例:sqlfiddle.com。那么使用查询会更容易。看起来好像您需要子选择。所以(select something from table where 1=1) as something.
  • 感谢 webnoob...已经研究过子选择,不确定我是否 100% 理解它们。

标签: php sql sql-server apache


【解决方案1】:

你需要一个条件求和:

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

也就是说,不要按where 子句中的条件进行过滤。只需将逻辑作为条件和放入即可。

【讨论】:

  • 谢谢戈登,会试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多