SQL SUM GROUP BY,其中id随时间变化

时间:2014-06-12 13:24:30

标签: sql sql-server ms-access

我在sql中有一个简单的任务,可以根据ID按月对值进行求和:

SELECT ID,sum(Monthly_value) 来自my_database 按ID分组

然而,我的数据被收集了好几年,同时几个ID值发生了变化,一些ID开发了相应的新业务并存在于两个ID下,在这些有限的情况下我需要将它们合并为一个。

我也收到了一份越来越多的名单,其中包含需要被视为一对的ID:

  • 旧的和相应的新ID我被要求为这些旧ID和新ID的总和(Monthly_value)
  • 将两个ID视为一个。

是否有一种简单的方法可以修改此代码,以便我不会在原始数据库中编辑旧ID,在某些情况下,我可以对多个ID的值进行求和,而对于大多数情况,我会求和,按一个ID分组。

我不应该用新ID替换旧的,因为其他查询可能仍然使用它。我可以使用另一个表,一个字典,其中一个ID可能具有相应的另一个ID,这两个ID都需要求和。我不确定要去哪个方向,也许

====我在这里尝试但不知道如何理解。======

SELECT ID, sum(Monthly_value), 
FROM my_database LEFT JOIN my_double_id_cases ON my.database.ID=my_double_id_cases.ID;
GROUP By 
Case
NOT NULL my_double_id_cases.SecondaryID
(I do not know what to do to get two ID's to be aggregated, no idea whatsoever) 
Else 
ID

....

数据非常简单,我从我的任务中删除了时间问题:

Id, date, value 
112233,21-10-2012,23 231
232123,20-11-2012,11 234
112233,11-12-2012,21 211
112233,12-12-2013,14 110
887755,12-12-2013,14 110

....(很多记录,好几年)......

突然在2013年中期我被告知112233现在将是001122(名称也已更改,实际上没有办法聚合但是外部列表,相应ID与新ID的字典

预期结果将是。

ID;  Sum (eg. for year 2014)
001122; 10 021 213 (includes also 112233 values, ID changed mid 2014) 
232123;  8 323 111 (includes also 887755 values, two IDs are in fact one entity) 

other ID's, the majority of them are  summed up like in the initial query (group by ID)   

在一天结束时,232123和887755也应该总结在一起。 如果不在我的“字典”中,其他ID将照常汇总。

=======平台=======

我正在使用ACE SQL,(实际上,如果我没有错,则是MS Access)。我的代码在VBA宏中,我的表在Excel文件中。

======================

我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

如果你有一张包含新旧ID列表的表:

SELECT isnull(n.newid,myd.ID) ID, sum(myd.Monthly_value) FROM my_database myd left join newoldids n on n.oldid = myd.id
GROUP By isnull(n.newid,myd.ID)

答案 1 :(得分:-1)

最简单的方法是使用一个新表,其中应该分组的所有ID都是一行的不同属性;这将消除任何疯狂操纵的需要,因为你可以总结代表所有其他人的新ID。