【发布时间】:2019-09-30 18:41:22
【问题描述】:
我正在使用 ODBC 将 Excel 数据提取导入 MSQuery,其中的数据如下所示:
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 Col11
----------------------------------------------------------------------------
null null null null null null null Units Units %Reach %Reach
Mkts Dept SCat Cat Seg Brnd UPC 4 W/E 10/06/17 4 W/E 11/03/17 4 W/E 12/01/17 4 W/E 02/02/17
ABC Dept1 Cat1 FOOD VEGG XWAR 3939493 231.11 883.43 49.13
ABC Dept1 Cat1 FOOD VEGG XWAR 5946942 422.32 222.64 91.84
ABC Dept1 Cat1 FOOD VEGG XWAR 4938843 543.34 null null
CDE Dept2 Cat2 BEV NVEG SAG 0549403 null 2 null
DEF Dept3 Cat3 UTL DARY MUG 4032850 null null null
有时数据文件可能会在顶部包含额外的空行,其中一些起始单元格包含一些文本。
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 Col11
----------------------------------------------------------------------------
sumtxt null null null null null null null null null null
null null null null null null null null null null null
null null null null null null null Units Units %Reach %Reach
Mkts Dept SCat Cat Seg Brnd UPC 4 W/E 10/06/17 4 W/E 11/03/17 4 W/E 12/01/17 4 W/E 02/02/17
ABC Dept1 Cat1 FOOD VEGG XWAR 3939493 231.11 883.43 49.13
ABC Dept1 Cat1 FOOD VEGG XWAR 5946942 422.32 222.64 91.84
ABC Dept1 Cat1 FOOD VEGG XWAR 4938843 543.34 null null
CDE Dept2 Cat2 BEV NVEG SAG 0549403 null 2 null
DEF Dept3 Cat3 UTL DARY MUG 4032850 null null null
现在,下面显示的行是 Facts 行:
null null null null null null null Units Units %Reach %Reach
它下面的行是维度行:
Mkts Dept SCat Cat Seg Brnd UPC 4 W/E 10/06/17 4 W/E
我想以某种方式删除顶部的空行,将维度行与事实行连接起来以获得单行。然后将此行提升为标题行。例如
Mkts Dept SCat Cat Seg Brnd UPC Units~4 W/E 10/06/17 Units~4 W/E 11/03/17 %Reach~4 W/E 12/01/17 %Reach~4 W/E 02/02/17
注意:维度行可能会有所不同,它们的名称可能会有所不同 每个数据提取。同样,Facts 行可能会有所不同,并且它们的名称 每次提取的数据可能不同。
这是否可以在 SQL 中执行此转换,在 MS Query 中也可以,以便我得到一个像这样的干净表:
Mkts Dept SCat Cat Seg Brnd UPC Units~4 W/E 10/06/17 Units~4 W/E 11/03/17 %Reach~4 W/E 12/01/17 %Reach~4 W/E 02/02/17
----------------------------------------------------------------------------
ABC Dept1 Cat1 FOOD VEGG XWAR 3939493 231.11 883.43 49.13
ABC Dept1 Cat1 FOOD VEGG XWAR 5946942 422.32 222.64 91.84
ABC Dept1 Cat1 FOOD VEGG XWAR 4938843 543.34 null null
CDE Dept2 Cat2 BEV NVEG SAG 0549403 null 2 null
DEF Dept3 Cat3 UTL DARY MUG 4032850 null null null
【问题讨论】:
-
这是周期性过程?最后 4 个字段名称表示非规范化的数据结构,假设每次导入都会改变。我怀疑 SQL 语句可以处理这个问题。
-
你更喜欢哪一个?导入前清理 Excel 数据?或者在它到达后清理 msaccess 表?在每种情况下,找到 Col1 = "Mkts" 的行并获取 Col8、Col9、Col10、Col11 的值。删除所有行“Mkts”行和之前的行,或删除所有行 Col7 为 Null 或 =“UPC”(设计一些合理的删除规则)。将每列重命名为“Mkts”,... 表示第 1 - 7 列,将“Units~”前缀为第 8-9 列,“%Reach~”为第 10-11 列。
-
@donPablo 问题是 Mkts 或单位可能不会出现在每个提取物中。
-
每个数据提取中是否存在 Units/Units/%Reach/%Reach 行?使用完全相同的拼写?然后用它来表示下一行具有列标题名称。
-
不@donPablo,这就是问题所在!数据提取的事实可能不同。
标签: sql ms-access null ms-query tableheader