如何合并重复的行

时间:2015-12-09 21:51:44

标签: ms-access ms-access-2010

我有一系列具有重复的MemberSS字段的行。这是因为在对其计划(月份列)进行更改时插入了新行。

我需要以下列方式合并重复的行(假设进入新表?):

  1. MonthsCover需要求和(是两个值的总和)。
  2. 月份列需要将其值合并为一个新行,以便填写所有月份。
  3. 我将如何做到这一点(我很难获得访问权限)?

    enter image description here

    这是我最初尝试做的事情:

    SELECT [Copy Of EmployeesDependents].ID, [Copy Of EmployeesDependents].[Member SSN], Sum([Copy Of EmployeesDependents].[Months Covered]) AS [SumOfMonths Covered], Max([Copy Of EmployeesDependents].Jan) AS MaxOfJan, Max([Copy Of EmployeesDependents].Feb) AS MaxOfFeb, Max([Copy Of EmployeesDependents].Mar) AS MaxOfMar, Max([Copy Of EmployeesDependents].Apr) AS MaxOfApr, Min([Copy Of EmployeesDependents].May) AS MinOfMay, Max([Copy Of EmployeesDependents].June) AS MaxOfJune, Max([Copy Of EmployeesDependents].July) AS MaxOfJuly, Max([Copy Of EmployeesDependents].Aug) AS MaxOfAug, Max([Copy Of EmployeesDependents].Sept) AS MaxOfSept, Max([Copy Of EmployeesDependents].Oct) AS MaxOfOct, Max([Copy Of EmployeesDependents].Nov) AS MaxOfNov
    FROM [Copy Of EmployeesDependents]
    GROUP BY [Copy Of EmployeesDependents].ID, [Copy Of EmployeesDependents].[Member SSN]
    HAVING ((([Copy Of EmployeesDependents].[Member SSN]) In (SELECT [Member SSN] FROM [Copy Of EmployeesDependents] As Tmp GROUP BY [Member SSN] HAVING Count(*)>1 )))
    ORDER BY [Copy Of EmployeesDependents].[Member SSN];
    

2 个答案:

答案 0 :(得分:0)

这会卷起来为你总结......

通过[会员SS]从您的桌面组中选择[会员SS],SUM(MonthsCover);

或者您可以将其与追加查询结合使用:

INSERT INTO newTable SELECT [Months SS],Sum(MonthsCover) 从你的表 GROUP BY [SS成员];

答案 1 :(得分:0)

如果你只有一个记录集在每个月的列中都有一个值,那么连接就相对简单了:

SELECT MemberSS, SUM(MonthsCover), MAX(Jan), MAX(Feb)
FROM EmployeesDependents
GROUP BY EmployeesDependents.MemberSS;

如果同一个月的列中最多有两个记录集,则可以使用FIRST(Jan) & LAST(Jan)或更好

FIRST(Jan) & IIF(FIRST(Jan)>'' AND LAST(Jan)>'',' - ','') & LAST(Jan)

因此,对于有两个值的情况,您需要ES - EE。如果每个会员的列上有两个以上的非空字段,则您需要一个在访问时不存在的GROUP_CONCAT,但您可以emulate

对于您是否需要将其添加到新表中的问题:它会使事情变得更复杂,因为每次运行查询时它都会将所有记录添加到新表中 - 而且您需要将其添加到新表中。 d要么稍后消除重复项,要么扩展查询,以便考虑到在之前的运行中哪些MemberSS已经完成 - 或者您可以在每次运行查询之前清除表并完全重建它 - 这取决于您的用例。 SQL将是这样的:

INSERT INTO concatTable (MemberSS, MonthsCover, Jan, Feb)
SELECT MemberSS, SUM(MonthsCover), MAX(Jan), MAX(Feb)
FROM EmployeesDependents
GROUP BY EmployeesDependents.MemberSS;

一种完全不同的方法是使用VBA,迭代每个记录集,对每个字段做你喜欢的事情(连接,求和......)然后将它写回一个记录并删除另一个记录。