Создать сводную таблицу из двух таблиц на основе дат

У меня есть две таблицы MS Access, разделяющие отношения один ко многим. Их структуры похожи на следующие:

tbl_Persons

+----------+------------+-----------+
| PersonID | PersonName | OtherData |
+----------+------------+-----------+
|    1     |  PersonA   |    etc.   |
|    2     |  PersonB   |           |
|    3     |  PersonC   |           |

tbl_Visits

+----------+------------+------------+-----------------------
| VisitID  |  PersonID  |  VisitDate | dozens of other fields
+----------+------------+------------+-----------
|    1     |     1      |  09/01/13  |
|    2     |     1      |  09/02/13  |
|    3     |     2      |  09/03/13  |
|    4     |     2      |  09/04/13  |  etc...

Я хочу создать новую таблицу на основе VisitDate поле, заголовки столбцов которого: посещение, где n равно 1 для количества посещений, посещение n- Data1, посещение n- Data2, посещение n- Data3 и т. д.

MergedTable

+----------+----------+---------------+-----------------+----------+----------------+
| PersonID |  Visit1  |  Visit1Data1  |  Visit1Data2... |  Visit2  | Visit2Data1... |
+----------+----------+---------------+-----------
|    1     | 09/01/13 |               |                 | 09/02/13 |
|    2     | 09/03/13 |               |                 | 09/04/13 |   
|    3     |  etc.    |               |

Я действительно не уверен, как это сделать. Будь то SQL-запрос или использование DAO, циклически просматривая записи и столбцы. Важно, что есть только 1 PersonID за строку, и все его данные отображаются в хронологическом порядке в столбцах.

1 ответ

Начните с рейтинга посещений с чем-то вроде

SELECT PersonID, VisitID, 
(SELECT COUNT(VisitID) FROM tbl_Visits AS C 
WHERE C.PersonID = tbl_Visits.PersonID 
AND C.VisitDate < tbl_Visits.VisitDate) AS RankNumber 
FROM tbl_Visits

Используйте этот запрос в качестве основы для "пивота"

Поскольку вы, кажется, несколько раз посещали людей в один и тот же день (посещения 1 и 2), предложение WHERE должно быть немного более сложным. Но я надеюсь, что вы получите основную концепцию.

Поворот может быть сделан с несколькими левыми соединениями. Я спрашиваю, будет ли мое решение иметь высокую производительность, поскольку я его не тестировал. В SQL Server это проще, чем в MS Access.

Другие вопросы по тегам