我正在使用的第三方应用程序(这不是Access,但使用MDAC库)有三个Access表,结构如下:
TagTable
TagName TagIndex TagType
peach 0 Float
apple 1 Float
grape 2 Float
cherry 3 String
等等更多行
FloatTable
DateAndTime TagIndex Value
03/02/2012 14:03:03 0 123.456
03/02/2012 14:03:03 1 123.456
03/02/2012 14:03:03 2 123.456
03/02/2012 14:06:05 0 456.789
03/02/2012 14:06:05 1 456.789
03/02/2012 14:06:05 2 456.789
等等更多行和次数
STRINGTABLE
DateAndTime TagIndex Value
03/02/2012 14:03:03 3 'Some string...'
03/02/2012 14:06:05 3 'Some other string'
等等更多行和次数
我想要做的是执行查询或运行代码(VBA)来获取这样的记录集:
DateAndTime peach apple grape cherry
03/02/2012 14:03:03 123.456 123.456 123.456 'Some string...'
03/02/2012 14:06:05 456.789 456.789 456.789 'Some other string'
等等。
通常情况下,我会通过“自我加入”或工会来解决这个问题。问题是TagTable中至少有90多行,结果中有90+列。我无法在查询中看到90多个连接,即使Access可以这样做。如果需要,我可以在应用程序中运行一些VBA代码。我调查使用TRANSFORM ... PIVOT,但没有聚合进行。我也看了一个“交叉表”查询,但是这会变得很复杂,有90多行/列。我知道我可以用VBA做到这一点,但我希望有一些我可以使用的Jet SQL魔法会有所帮助。
答案 0 :(得分:0)
您似乎希望使用交叉表来对数据进行非规范化。如果桃子和时间的交集只是一个值,也就是说桃子没有多个同时记录,你可以使用First(Value),Min(Value)或Max(Value)来返回正确的结果。这是MS Access正在寻找的聚合函数。