行到列(交叉表)有很多行

时间:2012-03-06 15:57:01

标签: sql-server-2008 ms-access vba jet

我正在使用的第三方应用程序(这不是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魔法会有所帮助。

1 个答案:

答案 0 :(得分:0)

您似乎希望使用交叉表来对数据进行非规范化。如果桃子和时间的交集只是一个值,也就是说桃子没有多个同时记录,你可以使用First(Value),Min(Value)或Max(Value)来返回正确的结果。这是MS Access正在寻找的聚合函数。