我有表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中的行数不相同。
由于
答案 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>