簡體   English   中英

SQL子查詢聯接和求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM