2013-09-05 3 views
1

일대 다 관계를 공유하는 두 개의 MS Access 테이블이 있습니다. 내가 열 머리글이있는있는 VisitDate 필드를 기준으로 새로운 테이블을 생성 할날짜를 기준으로 두 테이블에서 피벗 테이블 만들기

+----------+------------+-----------+ 
| 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... 

tbl_Persons : 그들의 구조는 다음과 같다 방문 - n 여기서 n은 방문수 V isit- N -Data1, n은 -Data2 Visit- , Visit- 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 개만이 존재해야하며 그의 모든 데이터는 시간순으로 열로 표시되어야합니다.

답변

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 절은 조금 더 정교해야합니다. 그러나 당신이 기본 개념을 얻길 바랍니다.

여러 LEFT JOIN으로 피벗을 수행 할 수 있습니다. 테스트하지 않았기 때문에 솔루션의 성능이 좋을지 질문합니다. MS Access보다 SQL Server에서 더 쉽습니다.

+0

감사합니다. @ Wietze314. 나는 SQL에 대해 많이 알지 못한다 (그리고 나는 그것을 배우려고 노력할 것이다). VBA를 사용하여이 문제를 해결할 수있는 방법을 만들었습니다. 코드는 내가 만든 별도의 게시물에 나타납니다. http://stackoverflow.com/questions/18651668/recordset-edits-and-updates-the-wrong-record – ome

관련 문제