SQL SUM 分组依据 - 基于另一个表中的“组”

zer*_*law 2 sql sql-server group-by sum

我希望我的解释是正确的。

我有 2 张桌子,

第一个表 ( table1)

+------------+------+-------+-------+
|    Date    | Item | Block | Total |
+------------+------+-------+-------+
| 2017-01    | a1   | B1    |  10.0 |
| 2017-01    | a2   | B1    |  20.0 |
| 2017-01    | a3   | B2    |  30.0 |
| 2017-02    | a1   | B1    |  40.0 |
| 2017-02    | a2   | B1    |  50.0 |
| 2017-02    | a3   | B2    |  60.0 |
+------------+------+-------+-------+
Run Code Online (Sandbox Code Playgroud)

第二个表 ( table2)

+------------+------+
| Item Group | Item |
+------------+------+
| IG1        | a1   |
| IG1        | a2   |
| IG2        | a2   |
| IG2        | a3   |
+------------+------+

*Note that, one item group has multiple items. 
The items may appear several time in different item groups.
Run Code Online (Sandbox Code Playgroud)

现在,我需要table1根据项目组 ( ) 对总数 ( table2) 求和,Date最后Block得出最终表:

+---------+------------+-------+-------+
|  Date   | Item Group | Block | Total |
+---------+------------+-------+-------+
| 2017-01 | IG1        | B1    |  30.0 |
| 2017-01 | IG2        | B1    |  20.0 |
| 2017-01 | IG1        | B2    |   0.0 |
| 2017-01 | IG2        | B2    |  30.0 |
+---------+------------+-------+-------+
Run Code Online (Sandbox Code Playgroud)

如何用SQL查询来实现这一点?

编辑:

好的。看来这是一件容易的事。我真丢脸。我不知道join并且Group By可以这样应用。SQL 真的很棒。这节省了大量的编码。

Rig*_*iri 5

在这种情况下, Ajoin和 simplegroup by应该适合您:

select t1.Date, t2.ItemGroup, t1.Block, sum(t1.Total) Total
from table1 t1 join table2 t2 on t1.Item = t2.Item
group by t1.Date, t2.ItemGroup, t1.Block
Run Code Online (Sandbox Code Playgroud)