在Access / SQL / Excel中基于类似标准合并多个logging的值

目前我有一排行看起来像这样

表

我想将所有具有相同FlNo的行合并到单个行,合并行的数据遵循以下标准:

  • 'FlNo'保持不变
  • “开始”将是最早的date
  • '结束'将是最新的date
  • “模式”代表星期几,所以它将是每一周出现的每一天的组合(即,如果第1行的模式=“12347”,第2行=“34567”,组合模式将=“ 1234567“,ie2:如果Row1 =”357“,Row2 =”357“,组合模式将保持相同=”357“)。 这部分已经困扰了我最多,因为我还没有find解决它的algorithm。
  • 'AC_Name'将是一个FlNo最常出现的值(在这个例子中是32)

所以最后一排就是了

FlNo | Start | End | Pattern | AC_Name | 660 | 26/Mar/2017 | 28/Oct/2017 | 1234567 | 32 | 

由于原始数据是Excel电子表格,所以应该基于Excel(VBA)/ Access(VBA / SQL)环境提供解决scheme。 它可以在Excel中进行处理,然后导入到Access或导入到Access,然后在那里处理或半/一半)。 就个人而言,我更喜欢在Access和SQL中处理,因为大约有13000行的数据。

请帮我find解决scheme来处理这些数据。 非常感谢你们

一旦你已经修复了数据,除了Ac_Name所有查询都是简单的:

 select FINo, min(start), max(end), max(IsMonday), max(IsTuesday), . . . from t group by FINo; 

获取Ac_Name是棘手的。 这应该工作:

 select FINo, min(start), max(end), max(IsMonday), max(IsTuesday), . . ., (select top 1 ac_name from t as t2 where t2.FINo = t.FINo group by ac_name order by count(*) desc, ac_name ) as ac_name from t group by FINo; 

一旦你已经适当地修复你的数据结构为你的模式列

你可以使用min(),max()和group .. ..统一到一个选定的表,最大数量

  select t1.FlNo , min(t1.Start ) , max( t1.End) , max(D1) , max(D2) , max(D3) , max(D4) , max(D5) , max(D6) , max(D7) , t2.AC_Name from my_table t1 INNER JOIN ( select FlNo, AC_Name, max(my_count) from ( select FlNo, AC_Name , count(*) AS my_count from my_table group by FlNo, AC_Name ) t GROUP BY lNo, AC_Name having my_count = max(my_count) ) t2 on t1.FlNo = t2.FlNo