2012-10-01 4 views
0

Access 2007을 사용하여 한 부서 내의 여러 부서에서 통계 (Excel)를 가져옵니다. 그들은 유사한 필드를 공유하지만 각 유닛은 자체 단위 테이블을 가지고 있습니다. 유닛 별 데이터/필드를 추적해야하기 때문입니다.여러 테이블/쿼리를 포함하는 MS Access 보고서 생성

테이블 : UNITA - (필드 : 등 날짜, 자동차, 보트, 태그, 총, 실종,)

테이블 : UnitB - (필드 : 날짜, 자동차, 보트, 태그, 총, 벤치 영장 등)

테이블 : UnitC - (필드 : 날짜, 자동차, 보트, 태그, 총, 지문 등)

나는 시작 날짜와 종료 날짜를 쿼리 요약 보고서를 작성해야하고 다음을 표시하는 보고서를 생성합니다.

각 reco의 개별 필드 각각의 합계 합계 ([UnitB! Cars]) + 합계 ([UnitB! Cars])

각 레코드의 공유 필드 각각의 합계 개별 단위없이 아무 문제없이.

3 개의 단위 보고서를 끝내고 하위 보고서를 사용하려고하면 문제가 생깁니다. Access에서 새로운 시작 날짜와 종료 날짜를 묻습니다.

누구에게 더 좋은 해결책이 있습니까? 각 쿼리 내에서 액세스 할 수있는 시작 날짜 및 종료 날짜 필드가 포함 된 "프롬프트"양식을 만들어야합니까?

답변

1

당신은 당신은 각 SELECT 필드의 수가 같아야 사용하여 조합

SELECT Date, Cars, Boats, Tags, Guns, 
    [Missing Persons], Null AS [Bench Warrants], Null AS Fingerprints FROM UnitA 
UNION ALL 
SELECT Date, Cars, Boats, Tags, Guns, 
    Null,    [Bench Warrants],   Null     FROM UnitB 
UNION ALL 
SELECTG Date, Cars, Boats, Tags, Guns, 
    Null,    Null,      Fingerprints   FROM UnitC 

하여 단일 쿼리를 만들 수 있습니다. 첫 번째 SELECT의 필드 이름이 결과에 사용됩니다.


그러나 다른 DB 디자인을 제안합니다. 공통 테이블의 모든 commom 필드를 배치하고 왼쪽 조인과 함께 이제 쿼리를 만들 수있는 1 대 1의 관계

CREATE TABLE Unit (
    UnitID CONSTRAINT PK_unit PRIMARY KEY, 
    Date datetime, 
    Cars long, 
    Boats long, 
    Tags long, 
    Guns long 
) 

CREATE TABLE UnitA (
    UnitID CONSTRAINT PK_unitA PRIMARY KEY, 
    [Missing Persons] Long 
) 
ALTER TABLE UnitA 
    ADD CONSTRAINT FK_unitA_unit 
    FOREIGN KEY (UnitID) REFERENCES Unit (UnitID) 


CREATE TABLE UnitB (
    UnitID CONSTRAINT PK_unitB PRIMARY KEY, 
    [Bench Warrants] Long 
) 
ALTER TABLE UnitB 
    ADD CONSTRAINT FK_unitB_unit 
    FOREIGN KEY (UnitID) REFERENCES Unit (UnitID) 


CREATE TABLE UnitC (
    UnitID CONSTRAINT PK_unitC PRIMARY KEY, 
    Fingerprints Long 
) 
ALTER TABLE UnitC 
    ADD CONSTRAINT FK_unitC_unit 
    FOREIGN KEY (UnitID) REFERENCES Unit (UnitID) 

에 동참 다른 테이블에서 단위 별 필드를 배치합니다.


이보다 쉽게 ​​디자인 한 테이블을 작성, 직접 엑셀 테이블을 가져 오는 대신 빈 필드를

CREATE TABLE Unit (
    UnitID CONSTRAINT PK_unit PRIMARY KEY, 
    Date datetime, 
    Cars long, 
    Boats long, 
    Tags long, 
    Guns long, 
    [Missing Persons] Long, 
    [Bench Warrants] Long, 
    Fingerprints Long 
) 

수 있도록, 그냥 엑셀 테이블을 연결 한 다음에 콘텐츠를 추가 사용자 지정 추가 쿼리가있는 공통 테이블 -

+0

또한 첫 번째 또는 세 번째 솔루션을 권하고 싶지만 OP가 데이터에 대해 얼마나 많은 제어를하는지에 따라 크게 달라질 수 있습니다. SQL Server의 테이블에서 테이블을 가져 오는 경우 Union을 선택하는 것이 가장 좋습니다. 그렇지 않으면 재 설계가 더 좋을 수 있습니다. – PowerUser

+0

두 번째 옵션을 사용해 보겠습니다. 현재 Excel 스프레드 시트를 사용하여 여러 필드의 통계를 여러 필드에서 가져오고 있으므로 한 개의 몬스터 테이블을 만들 수 없습니다. – Rory

+0

파워, 제 3의 솔루션이 마음에 들지만 엑셀에서 엑셀이나 알파 5 양식 제출으로 옮길 때가 있습니다. – Rory

2

더 나은 다음 사항 테이블에 통계 데이터를 가져 오기하는 단위 테이블에 공유 단위 데이터를 가져 오기 : 다음

CREATE TABLE Unit (
    UnitID CONSTRAINT PK_unit PRIMARY KEY, 
    UnitNo VarChar, 
    OtherUnitInfo) 

CREATE TABLE DetailCategory (
    CategoryID CONSTRAINT PK_DetailCategory PRIMARY KEY, 
    Category Varchar) -- example rows: 'Guns' 'Missing Persons' etc 

CREATE TABLE Unit_DetailCategory (
    UnitID FOREIGN KEY (UnitID) REFERENCES Unit (UnitID), 
    CategoryID FOREIGN KEY (CategoryID REFERENCES DetailCategory (CategoryID), 
    Qty Long) 

, 당신은/PIVOT,이 같은 변환 사용할 수 있습니다 잡아하는 방법 합계 값 :

TRANSFORM Sum(Unit_DetailCategory.Qty) AS SumOfQty 
SELECT 'Sum of Unit Values' AS FunctionName 
FROM DetailCategory 
RIGHT JOIN (Unit INNER JOIN Unit_DetailCategory 
    ON Unit.UnitID = Unit_DetailCategory.UnitID) 
    ON DetailCategory.CategoryID = Unit_DetailCategory.CategoryID 
GROUP BY 'Sum of Unit Values' 
PIVOT DetailCategory.Category 

주 - 내 구문은 CREATE 문에서 결함이 될 수 있으며, 당신은 당신이 원하는 것을 정확하게 얻을 수있는/TRANSFORM PIVOT 함께 플레이 할 수 있습니다. 그러나 이것은 내 컴퓨터에서 작동합니다.

+0

나는이 아이디어를 좋아한다. 마스터 테이블과 세부 테이블. 나는 아마 엑셀 스프레드 시트에서 벗어나 Access 또는 Alpha Five 솔루션으로 전진 할 직원을 마침내 설득 할 때이를 수행 할 것입니다. – Rory

관련 문제