将多个SQL select语句组合到列中

时间:2013-02-22 23:08:24

标签: mysql

我很难想到这一点,我们非常感谢任何帮助。

我有两个select语句,连接到一个或多个表。

SELECT repinfo.repName, SUM(callstatssummary.CallsIn)
FROM repinfo
LEFT JOIN callstatssummary
ON repinfo.isaacID = callstatssummary.IsaacID AND callstatssummary.ShiftDate >= '2013-02-10' AND callstatssummary.ShiftDate <= '2013-02-16'
GROUP BY repinfo.repName;

第一个语句的输出是repinfo表中每个人的列表,其中包含他们在一周内完成的总呼叫的总和。我使用左连接来包括未在结果中接听电话的人。

SELECT repinfo.repName, SUM(`1036`.afterRgu) - SUM(`1036`.priorRgu)
FROM repinfo
JOIN reporders
ON repinfo.repID = reporders.oRep
JOIN `1036`
ON reporders.workOrder = `1036`.workOrder AND `1036`.entryDate >= '2013-02-10' AND `1036`.entryDate <= '2013-02-16' AND `1036`.afterRgu >= `1036`.priorRgu
GROUP BY repinfo.repName;

第二个声明输出每个人在一周内销售的产品数量。 repinfo表包含有关代表的信息,该代表与reporders表连接以匹配工作单。 1036表有关于订单的详细信息。

我希望输出这样的东西 - 基本上结合两个select语句的输出:

|  repName  |  SUM(callstatssummary.CallsIn) |  SUM(`1036`.afterRgu) - SUM(`1036`.priorRgu)  |
______________________________________________________________________________________________
| Bruce W   | 41                             | 13                                            |
| Cathy M   | 84                             | 17                                            |
| Jonah S   | NULL                           | 29                                            |

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

组合这些语句的一种方法是使每个语句成为派生表/内联视图并加入repName

请注意:如果两个销售代表名称相同,显然您希望加入代表ID号(或任何您称之为repinfo表的主键)。

select 
  r.repName, c.sumCallsIn, o.sumProdSold
from
  repinfo r
  left join (
    SELECT repinfo.repName, 
           SUM(callstatssummary.CallsIn) sumCallsIn
    FROM   repinfo
           LEFT JOIN callstatssummary
           ON repinfo.isaacID = callstatssummary.IsaacID 
           AND callstatssummary.ShiftDate >= '2013-02-10' 
           AND callstatssummary.ShiftDate <= '2013-02-16'
    GROUP BY repinfo.repName
  ) c
  on c.repName = r.repName
  left join (
    SELECT repinfo.repName, 
           SUM(`1036`.afterRgu) - SUM(`1036`.priorRgu) sumProdSold
    FROM   repinfo
           JOIN reporders
           ON repinfo.repID = reporders.oRep
           JOIN `1036`
           ON reporders.workOrder = `1036`.workOrder 
           AND `1036`.entryDate >= '2013-02-10' 
           AND `1036`.entryDate <= '2013-02-16' 
           AND `1036`.afterRgu >= `1036`.priorRgu
    GROUP BY repinfo.repName
  ) o
  on r.repName = o.repName
order by r.repName;