转换列名称以用作Access中的行字段

时间:2013-11-26 20:37:19

标签: sql xml database ms-access-2010

我正在将sql导入我的Access数据库,并正在将数据解析为正确的表和字段。我遇到了一个问题,因为我的导入创建了列名并将值输入到列中,但数据库使用这些列名作为行值和单独列中的值

当前表格

 SC | DO | temp | pH | etc

 val|val | val  |val | val

表我试图解析

 Characteristic_Name | Result_Value

 SC                  |  val
 DO                  |  val
 temp                |  val
 pH                  |  val
 etc.                |  val

我已经完成了一个联合查询,可以很好地填充结果列,但我无法解析列名 有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

由于您使用的是MS Access,因此没有UNPIVOT功能,因此您可以使用UNION ALL查询:

select 'SC' as Characteristic_Name, SC as Val
from yourtable
union all
select 'DO' as Characteristic_Name, DO as Val
from yourtable
union all
select 'temp' as Characteristic_Name, temp as Val
from yourtable
union all
select 'pH' as Characteristic_Name, pH as Val
from yourtable
union all
select 'etc' as Characteristic_Name, etc as Val
from yourtable;

作为旁注,当您执行UNION ALL或UNPIVOT时,数据类型必须相同,因此您可能必须转换val列中的数据,因此它们是相同的。

答案 1 :(得分:0)

您可以创建类似于此的VBA功能:

Set db = CurrentDb()
Set rs1 = db.OpenRecordset("CurrentTable")
Dim fld As DAO.Field
Dim SQL as string
For Each fld In rs1.Fields
    SQL = SQL & fld.Name & ","
Next
...

通过这种方式,您可以提取字段名称并添加组成SQL字符串所需的代码,以便在规范化表格中插入数据。

答案 2 :(得分:0)

如果您希望直接避免使用SQL代码,可以使用Access Query编辑器执行上述操作。

在设计工具栏中按“查询设计”按钮后,选择表格中的所有字段。

删除字段SC,DO,temp,pH等。

在查询编辑器标签中,添加新字段:

  • Characteristics_Name:“SC”
  • Characteristics_Value:SC

并按设计工具栏上的生成表按钮,选择一个新的表名,然后运行查询以创建此表。

然后再次打开相同的查询并执行以下字段编辑:

  • Characteristics_Name:“DO”
  • Characteristics_Value:DO

并按设计工具栏上的附加表格按钮。

选择与上面相同的新表名并运行查询。

检查您的行数是否为两倍。

再次重复编辑:

  • Characteristics_Name:“temp”
  • Characteristics_Value:temp

最后检查您是否将行数乘以您想要删除的列数。

虽然不像上面那么快,但任何人都可以使用他们自己的问题,特别是那些担心错误代码的人。