2013-09-05 4 views
1

У меня есть две таблицы 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 поля, заголовки столбцов которых Visit-n, где n - 1 по количеству посещений, V isit- н -Data1, Visit- н -Data2, Visit- п -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, и все его данные отображаются хронологически в столбцы.

ответ

0

Начало путем ранжирования посещений с чем-то вроде

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.

+0

Спасибо, @ Wietze314. Я действительно мало что знаю о SQL (и я попытаюсь его изучить). Я проделал эту проблему с помощью VBA. Код появляется в отдельном сообщении, которое я сделал. http://stackoverflow.com/questions/18651668/recordset-edits-and-updates-the-wrong-record – ome