2014-05-21 5 views
2

정확한 방향을 지적해야합니다. Access에서 고정 너비 파일을 만들어야합니다. 데이터는 2 개의 테이블 (고용주와 고용인)에서 나옵니다. 텍스트 파일에는 고용주 레코드가 표시되어야하며 다음 레코드에는 직원 데이터가 포함됩니다. 결과 파일 레이아웃은 별도의 시스템에 업로드하는 데 사용됩니다.두 테이블의 고정 너비 텍스트 파일

고용주 표

RecordID - 2 char - always 01 
EmployerNumber - 6 char 
EmployerName - 25 char 
ReportID (pk) - Not included on text file, only used to relate employer with employee 

직원 테이블

RecordID - 2 char - always 02 
EmployeeNumber - 4 char 
EmployeeName - 25 char 
ReportID (fk) - Not included on text file, only used to relate employee with employer 
,617,451 예 :

결과 텍스트 파일 :

01PENGUINS 
028686CROSBY 
027777MALKIN 
026666LEMIEUX 
01ACME INC 
021122BUGS BUNNY 
021133DAFFY DUCK 
029872ROAD RUNNER 

답변

0
샘플 데이터 [고용주]이되도록 모양 [ReportID]는 정수이라고 가정

...

ReportID EmployerNumber EmployerName RecordID 
-------- -------------- ------------ -------- 
     1PENGUINS  01  
     2ACME INC  01  

... 및 [종업원] 본 ...

ReportID EmployeeNumber EmployeeName RecordID 
-------- -------------- ------------ -------- 
     1 8686   CROSBY  02  
     1 7777   MALKIN  02  
     1 6666   LEMIEUX  02  
     2 1122   BUGS BUNNY 02  
     2 1133   DAFFY DUCK 02  
     2 9872   ROAD RUNNER 02  

쿼리

SELECT 
     RecordID & EmployerNumber & EmployerName AS RowData, 
     CDbl(ReportID) AS RowSort 
    FROM Employer 
UNION ALL 
    SELECT 
     RecordID & EmployeeNumber & EmployeeName AS RowData, 
     CDbl(ReportID) + Val(EmployeeNumber)/10000 AS RowSort 
    FROM Employee 

반환

,536,913,632 10
RowData   RowSort 
----------------- ------- 
01PENGUINS   1 
01ACME INC   2 
028686CROSBY  1.8686 
027777MALKIN  1.7777 
026666LEMIEUX  1.6666 
021122BUGS BUNNY 2.1122 
021133DAFFY DUCK 2.1133 
029872ROAD RUNNER 2.9872 

때문에 쿼리

SELECT RowData 
FROM 
    (
      SELECT 
       RecordID & EmployerNumber & EmployerName AS RowData, 
       CDbl(ReportID) AS RowSort 
      FROM Employer 
     UNION ALL 
      SELECT 
       RecordID & EmployeeNumber & EmployeeName AS RowData, 
       CDbl(ReportID) + Val(EmployeeNumber)/10000 AS RowSort 
      FROM Employee 
    ) 
ORDER BY RowSort 

반환

RowData   
----------------- 
01PENGUINS 
026666LEMIEUX  
027777MALKIN  
028686CROSBY  
01ACME INC 
021122BUGS BUNNY 
021133DAFFY DUCK 
029872ROAD RUNNER 

그냥 Access에서 마지막 쿼리를 저장 한 다음 텍스트로 내 보냅니다.

+0

은 필드 수에 대한 SQL 제한이어야 함을 인식했습니다.고용주 필드를 제거하면. 그것은 작동합니다. 텍스트 파일을 완성하려면 111 개의 모든 필드가 필요합니다. 다른 데이터베이스 프로그램을 사용하는 것이 더 좋을까요? – exceldude2001

+0

@ exceldude2001 'SELECT ... FROM Employer' 하위 쿼리를 모두 111 개의 필드와 함께 실행하면 어떻게됩니까? 그렇다면 다른 옵션은 일부 VBA 코드와 UNION 쿼리 대신 임시 테이블을 사용하는 것일 수 있습니다. –

+0

SELECT 문당 액세스 필드가 100 개임을 발견했습니다. 임시 해결책으로, 나는 employer 테이블 (스테이징 테이블?)을 분할 한 다음 두 가지 select 문을 어떻게 든 연결한다고 생각 했습니까? – exceldude2001

0

귀하의 문제는 초보자를위한 조금 복잡하지만,이 개 부분이 있습니다

  1. 당신은이 테이블에 가입해야합니다. 몇 가지 예를 들어 'SQL 내부 조인'에 대해 google을 수행해야합니다.
  2. 원하는 형식으로 데이터를 내 보내야합니다. Left() 기능을 사용하여이 작업을 수행 할 수 있습니다. 이 쿼리는 고용주로부터 2 개 테이블 (맨 아래에있는 Join 참조) 및 디스플레이 먼저 3 개 필드를 조인

    Select 
    ER.RecordID & 
    left(ER.EmployerNumber & "  ",6) & 
    left(ER.EmployerName & "       ",25) & 
    EE.RecordID & 
    Left(EE.EmployeeNumber & " ",4) & 
    Left(EE.EmployeeName & "       ",25) as SingleCol 
    From Employee EE 
    Join Employer ER on EE.ReportID=ER.ReportID 
    

    :

가정 테이블이 직원과 고용주라고,이 SQL 문을 고려 테이블 다음에 Employee 테이블의 3 개 필드가옵니다. 모든 공백이있는 Left() 문은 공백으로 필드를 채 웁니다. 이 쿼리는 정확히 1 개의 긴 텍스트 필드를 반환합니다.

관련 문제