我正在将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
我已经完成了一个联合查询,可以很好地填充结果列,但我无法解析列名 有没有办法做到这一点?
答案 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等。
在查询编辑器标签中,添加新字段:
并按设计工具栏上的生成表按钮,选择一个新的表名,然后运行查询以创建此表。
然后再次打开相同的查询并执行以下字段编辑:
并按设计工具栏上的附加表格按钮。
选择与上面相同的新表名并运行查询。
检查您的行数是否为两倍。
再次重复编辑:
等
最后检查您是否将行数乘以您想要删除的列数。
虽然不像上面那么快,但任何人都可以使用他们自己的问题,特别是那些担心错误代码的人。