SQL子查询联接和求和

SQL子查询联接和求和,sql,subquery,microsoft-sal,Sql,Subquery,Microsoft Sal,我有表1和表2,这两个表都有共同的列名ID 表1中有重复的行条目,我可以使用以下方法修剪这些行: SELECT DISTINCT 表2有重复的数字条目(dollarspent),用于我需要的ID,并且能够总结: Table 1 Table 2 ------------ ------------------ ID spec ID Dol1 Dol2 54 A 54 1 0 54

我有表1和表2,这两个表都有共同的列名ID

表1中有重复的行条目,我可以使用以下方法修剪这些行:

SELECT DISTINCT 
表2有重复的数字条目(dollarspent),用于我需要的ID,并且能够总结:

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在列ID上的结果联接,(a)表1中没有重复项,(b)表2中的$value总和

例如:

NewTable
----------------------------------------
ID     Spec          Dol1           Dol2
54      A             3               1
55      B             3               2
注:表1和表2中的行数不相同


感谢使用派生表从表1中获取不同的值,只需连接到表2并使用聚合即可

问题是,表1和表2之间存在M:M关系。你需要它是一个1:M的总和才能准确。因此,我们通过使用select distinct从表1派生t1,以给出1:M关系中的唯一记录(假设每个ID的规格相同)


这确实假设您只需要同时存在于这两者中的记录。否则,我们可能需要使用(左、右或全)外部联接;取决于所需的结果。

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

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有多个规格,则这将给出正确的总和(尽管是多行)。

Hey,@ryan199004。你能重新发布并正确格式化它吗?你可以考虑去寻求帮助。如果你愿意,拍张照片,我可以试着帮你。这里真正的问题是,为什么你在表1的ID上有重复项。开发的任何解决方案都可能是针对症状,而不是根本原因。但鉴于数据是适当的。。。解决方案如下。
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;