2

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

表 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 中的行数不相同。

谢谢

4

3 回答 3

1

使用派生表从 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)外连接;取决于期望的结果。

于 2018-02-19T15:27:58.320 回答
0

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

SELECT DISTINCT ID
FROM TblOne

UNION ALL

SELECT DISTINCT ID, SUM(Dol)
FROM TblTwo
GROUP BY ID
于 2018-02-19T15:28:56.307 回答
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 有多个规范。

于 2018-02-19T15:31:08.480 回答