我在彙總中對查詢中的某些列進行求和時遇到了一些麻煩。 描述發生了什麼有點困難,但我會盡我所能:
我有3個表 - 細節,額外的細節和地方。 地方是一張表,包含世界上的地方。詳細信息包含有關發生的事件的詳細信息,額外的詳細信息提供了有關事件的更多數據
每個地方有一個ID
和一個ParentID
(像紐約有一個ID
,它的父母ID
是US
。類似的東西)。事件(詳細信息)的ID
作爲額外詳細信息表中的列出現多次。額外的詳細信息表格還包含該事件發生地點的ID
。
好了畢竟,我試圖實現的是,對於每個地方,發生在那裏的事件的總和。我知道這聽起來很具體,但這是客戶要求的。
無論如何,我試圖去的例子: 紐約60,芝加哥20,休斯頓10然後美國將有90.它有幾個層次。
所以這就是我要怎樣做:
SQL中的聚合總和(加入)
With C(ID, NAME, COUNTT, ROOT_ID) as
(
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID -- ****
GROUP BY d.ID, d.NAME),
d.ID as ROOT_ID
FROM PLACES d
UNION ALL
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID
GROUP BY d.ID, d.NAME),
C.ROOT_ID
FROM PLACES dx
INNER JOIN C ON dx.PARENT_ID = C.ID
)
SELECT p.ID, p.NAME, S.SumIncludingChildren
FROM places p
INNER JOIN (
SELECT ROOT_ID, SUM(COUNTT) as SumIncludingChildren
FROM C
GROUP BY ROOT_ID
) S
ON p.ID = S.ROOT_ID
ORDER BY p.ID;
詳細資料表格僅用於展示他們的數據。稍後我會補充。它只是比較各個列。爲了使它工作,我不需要那個。僅用於網站數據。
它不起作用,因爲它不識別'****'所在的'd'。如果我將該表格的「新實例」放入其中,它也不起作用。所以我試圖複製什麼正確的加入做'NOT EXISTS IN'
查詢獲取所有的地方,而不是正確的加入...上。同樣的問題。
也許我沒有得到什麼。但我真的在尋求解決方案和一些解釋。我知道我的代碼並不完美。 在此先感謝。
編輯:我使用的是蟾蜍10.6
OracleSQL也許你可以添加表的說明? – sers