我有一系列具有重复的MemberSS字段的行。这是因为在对其计划(月份列)进行更改时插入了新行。
我需要以下列方式合并重复的行(假设进入新表?):
我将如何做到这一点(我很难获得访问权限)?
这是我最初尝试做的事情:
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];
答案 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,迭代每个记录集,对每个字段做你喜欢的事情(连接,求和......)然后将它写回一个记录并删除另一个记录。