如何合并重复行

How to merge duplicate rows

我有一系列具有重复 MemberSS 字段的行。这是因为在更改他们的计划(月列)时会插入一个新行。

我需要按以下方式合并重复的行(假设合并到新的 table?):

  1. MonthsCover 需要求和(为两个值的和)。
  2. 月份列需要将它们的值合并到一个新行中,以便填写所有月份。

我将如何完成此操作(我是新手)?

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

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];

这将汇总并为您求和...

Select [Member SS],[Member SS] 的 yourTable 组中的 SUM(MonthsCover);

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

插入新表 SELECT [月 SS],Sum(MonthsCover) 从你的桌子 GROUP BY [会员SS];

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

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。如果每个 MemberSS 的列上有两个以上的非空字段,您需要一个 GROUP_CONCAT,它在访问中不存在,但您可以 emulate.

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

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

一种完全不同的方法是使用 VBA,遍历每个记录集,对每个字段做你喜欢的(连接、求和...),然后将其写回一条记录并删除其他.