如何合并重复的行
Posted
技术标签:
【中文标题】如何合并重复的行【英文标题】:How to merge duplicate rows 【发布时间】:2015-12-09 21:51:43 【问题描述】:我有一系列包含重复 MemberSS 字段的行。这是因为当他们的计划(月份列)发生更改时会插入一个新行。
我需要通过以下方式合并重复的行(假设到新表中?):
-
MonthsCover 需要求和(是两个值的总和)。
月份列需要将它们的值合并到一个新行中,以便填写所有月份。
我将如何做到这一点(我是新手)?
这是我最初尝试做的:
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];
【问题讨论】:
【参考方案1】:如果您只有一个记录集在每个月的列中都有一个值,那么连接相对简单:
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。
如果您需要将其添加到新表中的问题:这会使事情变得更加复杂,因为每次运行查询时它都会将所有记录添加到新表中 - 您可以消除重复项稍后或扩展查询,以便考虑哪些 MemberSS 在之前的运行中已经完成 - 或者您可以在每次运行查询之前清除表并完全重建它 - 这取决于您的用例。 SQL 应该是这样的:
INSERT INTO concatTable (MemberSS, MonthsCover, Jan, Feb)
SELECT MemberSS, SUM(MonthsCover), MAX(Jan), MAX(Feb)
FROM EmployeesDependents
GROUP BY EmployeesDependents.MemberSS;
一种完全不同的方法是使用 VBA,遍历每个记录集,对每个字段进行您喜欢的操作(连接、求和...),然后将其写回一条记录并删除另一条记录。
【讨论】:
【参考方案2】:这将为您汇总和汇总...
Select [Member SS], SUM(MonthsCover) from yourTable Group by [Member SS];
或者您可以将其与附加查询结合使用:
插入新表 SELECT [Months SS], Sum(MonthsCover) 从你的桌子 GROUP BY [会员 SS];
【讨论】:
以上是关于如何合并重复的行的主要内容,如果未能解决你的问题,请参考以下文章