2017-02-26 75 views
0

目前,我有行的表看起来像这样合并价值乘数记录/ Excel中

Table

我想用同样的FlNo所有行合并到一个单一的行,合并后的行的数据遵循这些标准:

  • “FlNo”保持不变
  • “开始”将是最早日期
  • '结束'将是最新日期
  • '模式'将代表星期几,所以它将是在每一行中出现的所有星期几的组合(即,如果第1行的模式=“12347”,第2行=“34567”,组合模式将=“1234567”,即2:如果第1行=“357”,第2行=“357”,组合模式将保持相同=“357” )。这部分困扰了我最多,因为我还没有找到解决它的算法。
  • “AC_Name”将是其中出现大多数时间用于FlNo的值(在这种情况下将是32)

所以最后一行将是

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

由于原来的数据是一个Excel Spreadsheet,因此应该基于Excel(VBA)/ Access(VBA/SQL)环境提供解决方案。它可以先在Excel中处理,然后导入到Access或导入到Access,然后在那里处理或半/半)。就个人而言,我宁愿使用Access和SQL进行处理,因为大约有13000行数据。

请帮我找到解决方案来处理这些数据。非常感谢你们。

+1

修复你的数据结构!在每周的每一天都有一列,填充一个标志(例如“0”和“1”),表示该日是否属于“模式”的一部分。 –

+0

@GordonLinoff感谢您的回复。是的,我可以做到这一点,但那么我如何将数据合并在一起? –

+0

这是一个有趣的问题。希望您以特殊的方式提供数据而不是图片。问题的第二部分不清楚。您的实际数据库excel/access/sql server是什么?可能这是SSIS的理想场景。 – KumarHarsh

回答

0

一旦你有固定的数据,为所有,但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; 
+0

这是完美的,谢谢! –

+0

如果我还想选择3个其他字段,Blkt,STD,STA,该怎么办?我想选择与STD和STA等价的Max(Blkt)(每个帧都有自己的STD和STA)。非常感谢! –

+0

@TracNgon。 。 。新问题应该作为问题提出,而不是作为评论。但是,您可能可以重复子查询以获取更多列。 –

1

一旦已正确固定您为图案列的数据结构

则可以通过使用min(),MAX()和组..联合到所选择的表,最大为计数

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 
+0

这似乎并不适用于我(我只将my_table更改为我的表名,并在第一行的t1.FlNo后添加了逗号)。错误说Count(*)上有一个错误my_count –

+0

另外我有新的结构7模式的列,mamed:D1,D2,....值为0或1.我怎么也加入他们在好? –

+0

答案已更新.. – scaisEdge