2013-02-22 48 views
2

我很難繞過這一點,任何幫助都非常感謝。將多個SQL 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           | 

有什麼建議?

回答

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; 
+0

優秀的回覆,謝謝。我之前對派生表的使用經驗不多,但能夠完美地閱讀和理解。很棒! – 2013-02-22 23:50:53

+0

非常歡迎。我很高興聽到它爲你工作。 – bernie 2013-02-23 00:10:21