共有三個表:案例、呼叫和子事件。
表架構是一個Case可以有多個Call,每個Call可以有多個SubEvent。我想使用查詢來獲取特定日期后每個案例的所有呼叫計數和所有子事件(如果有)的計數。
例如,名為 John 的案例有 3 個呼叫……第一個呼叫有 2 個子事件,第二個呼叫有 1 個子事件,第三個呼叫有 0 個。所以查詢應該回傳這個結果:
| 案子 | 通話總數 | 子事件總計 |
|---|---|---|
| 約翰 | 3 | 3 |
我已經嘗試使用子查詢等多種方式撰寫查詢,但我無法讓它正常作業。我最接近的是下面的查詢,但這提供了不正確的呼叫計數。當它應該給我 3 時,它給了我 4。我嘗試的另一個示例有 4 次呼叫和 10 個子事件,但查詢回傳的呼叫總數為 11 次而不是 4 次。
我會很感激任何幫助。我的 SQL 在閑置一段時間后已經生銹了,這是在某人的 Access 資料庫中,在撰寫 SQL 查詢時它是相當善變的。
SELECT c.casename, Count(e.callid) AS EventTotal, Count(s.id) AS SubEventTotal
FROM (cases AS c INNER JOIN calls AS e ON c.contactid = e.contactid) left JOIN tblSubEvents AS s ON e.callid = s.callid
WHERE e.calldate > #1/1/2022#
GROUP BY c.casename
uj5u.com熱心網友回復:
試試這個:
SELECT
c.casename
,Count(e.callid) AS EventTotal
,sum(s.id) AS SubEventTotal
FROM (cases AS c INNER JOIN calls AS e ON c.contactid = e.contactid)
left JOIN (select callid, count(s.id) as id from tblSubEvents s group by callid) AS s ON e.callid = s.callid
WHERE e.calldate > #1/1/2022#
GROUP BY c.casename
基本上,將子事件計數的責任推到連接查詢中。
uj5u.com熱心網友回復:
考慮加入兩個聚合派生表:
SELECT case.casename, c_agg.EventTotal, e_agg.SubEventTotal
FROM (case
INNER JOIN (
SELECT contactid, COUNT(callid) AS EventTotal
FROM calls
WHERE calldate > CDate('2022-01-01')
GROUP BY contactid
) c_agg
ON case.contactid = c_agg.contactid)
LEFT JOIN (
SELECT callid, COUNT(id) AS SubEventTotal
FROM tblSubEvents
GROUP BY callid
) e_agg
ON c_agg.callid = e_agg.callid
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478481.html
上一篇:使用python變數從使用sqlalchemy的訪問表中讀取特定行
下一篇:訪問查詢中的COUNTIF
