2012-03-06 24 views
0

的第三方應用程序,我有工作(這是不能上網,但使用MDAC庫)具有結構類似這樣的三種訪問表:行到列(交叉)與許多行

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多列。即使Access可以做到這一點,我也無法在查詢中看到90多個連接。如果需要,我可以在應用程序中運行一些VBA代碼。我看着使用TRANSFORM ... PIVOT,但沒有進行聚合。我還查看了一個「交叉表」查詢,但這會變得很複雜,每行90列以上。我知道我可以用VBA做到這一點,但我希望有一些Jet SQL魔法可以使用,這將有所幫助。

+0

您是否嘗試過使用查詢設計窗口創建交叉表?這對我來說並不複雜。不要忘記,您可以在兩個交叉表之間使用連接,此外,如果這是一次關閉,您還可以使用交叉表創建一個新表。 – Fionnuala 2012-03-06 16:30:17

+0

@Remou:我沒有嘗試過設計窗口,所以我現在就嘗試。訪問需要某種聚合函數,我不想在這裏。我一直在做的關於交叉表查詢的研究看起來像他們都想要某種聚合函數。這是真的?如果是這樣,那麼我不能使用交叉表。 – GeezerGeek 2012-03-06 21:40:47

+0

有一些方法。如果桃的交點時間只是一個值,也就是說,桃不會有多個記錄同時出現,您可以使用First(Value),Min(Value)或Max(Value)返回正確的結果。這是MS Access正在尋找的聚合函數。 – Fionnuala 2012-03-06 22:08:14

回答

0

您似乎希望使用交叉表來反規格化數據。如果桃的交點時間只是一個值,也就是說,桃不會有多個記錄同時出現,您可以使用First(Value),Min(Value)或Max(Value)返回正確的結果。這是MS Access正在尋找的聚合函數。