SQL子查询联接和求和
我有表1和表2,这两个表都有共同的列名ID 表1中有重复的行条目,我可以使用以下方法修剪这些行: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
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;