Строки в столбцы (кросс-таблица) с множеством строк - PullRequest
0 голосов
/ 06 марта 2012

Стороннее приложение, с которым я работаю (это НЕ Access, но использует библиотеку 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 столбцов.Я не вижу выполнения более 90 соединений в запросе, даже если бы Access мог это сделать.Я могу запустить некоторый код VBA в приложении, если это необходимо.Я рассматривал использование use TRANSFORM ... PIVOT, но агрегация не происходит.Я также посмотрел на запрос «кросс-таблицы», но это усложнит более 90 строк / столбцов.Я знаю, что могу сделать это с VBA, но я надеялся, что есть некоторая магия Jet SQL, которую я могу использовать, которая поможет.

1 Ответ

0 голосов
/ 07 марта 2012

Кажется, вы хотите использовать кросс-таблицу для денормализации данных.Если пересечение значения «персик» и «время» является только одним значением, то есть для персика не существует нескольких записей с одним и тем же временем, вы можете использовать First (Значение), Min (Значение) или Max (Значение), чтобы вернуть правильный результат.Это агрегатная функция, которую ищет MS Access.

...