[英]SQL Subquery Join and Sum
我在兩個表中都有共同的列名ID的表1和2。
表1包含行的重復條目,我可以使用這些條目進行修整:
SELECT DISTINCT
表2中有重復的ID的,我需要的,並能總結出數字輸入(dollarspent):
Table 1 Table 2
------------ ------------------
ID spec ID Dol1 Dol2
54 A 54 1 0
54 A 54 2 1
55 B 55 0 2
56 C 55 3 0
-我需要將這兩個查詢合並為一個,以便得到表1和表2 ON列ID的結果JOIN,(a)表1中沒有重復項,以及(b)表2中的匯總$值
例如:
NewTable
----------------------------------------
ID Spec Dol1 Dol2
54 A 3 1
55 B 3 2
注意:表1和2中的行數不相同。
謝謝
使用派生表從table1獲取不同的值,然后簡單地加入表2並使用聚合。
您遇到的問題是,您在table1和table2之間具有M:M關系。 您需要將其設置為1:M,以使總和准確。 因此,我們通過使用select變量從table1派生t1來為我們提供1:M關系中的唯一記錄(假設每個ID的規格都相同)
SELECT T1.ID, T1.Spec, Sum(T2.Dol1) as Dol1, sum(T2.Dol2) as Dol2
FROM (SELECT distinct ID, spec
FROM table1) T1
INNER JOIN table2 T2
on t2.ID = T1.ID
GROUP BY T1.ID, T1.Spec
這確實假設您只想要兩個中都存在的記錄。 否則,我們可能需要使用(左,右或全)外部聯接; 取決於所需的結果。
我確實看不到您的數據,但是您可能需要嘗試:
SELECT DISTINCT ID
FROM TblOne
UNION ALL
SELECT DISTINCT ID, SUM(Dol)
FROM TblTwo
GROUP BY ID
預匯總表2,然后加入:
select t1.id, t1.spec, t2.dol1, t2.dol2
from (select t2.id, sum(dol1) as dol1, sum(dol2) as dol2
from table2 t2
group by t2.id
) t2 join
(select distinct t1.id, t1.spec
from table1 t1
) t1
on t1.id = t2.id;
對於您的數據示例,您不需要預先匯總表2。如果table1
具有給定ID的多個規范,則可以提供正確的總和-盡管可以是多行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.