SQL子查询加入和求和

时间:2018-02-19 15:23:20

标签: sql subquery microsoft-sal

我有表1和表1 2,两者都有共同的列名ID。

表1有重复的行条目,我可以使用它来修剪:

SELECT DISTINCT 

表2有ID的重复数字条目(moneypent),我需要并能够总结:

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和表1的结果JOIN。表2 ON列ID,(a)表1和表1中没有重复。 (b)表2中的$值总和

例如:

NewTable
----------------------------------------
ID     Spec          Dol1           Dol2
54      A             3               1
55      B             3               2

注意:表1和表2中的行数不相同。

由于

3 个答案:

答案 0 :(得分:0)

使用派生表从table1获取不同的值,并简单地连接到表2并使用聚合。

您遇到的问题是table1和table2之间存在M:M关系。您需要它为1:M才能使求和更准确。因此,我们通过使用select distinct从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

这假设您只想要两者中都存在的记录。否则我们可能需要使用(LEFT,RIGHT或FULL)外连接;取决于期望的结果。

答案 1 :(得分:0)

我无法真正看到您的数据,但您可能想尝试:

SELECT DISTINCT ID
FROM TblOne

UNION ALL

SELECT DISTINCT ID, SUM(Dol)
FROM TblTwo
GROUP BY ID

答案 2 :(得分:0)

预聚合表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的多个规范,则会给出正确的总和 - 尽管是多行。 / p>