2009-12-10 4 views
2

직장에서 반복되는 테마가 될 수있는 문제에 대한 답을 찾을 수 있기를 바랍니다. 여기에는 RDBMS 테이블에서 반복되는 그룹 (도메인 및 의미 공유)이있는 플랫 파일 형식으로 데이터를 비정규 화하는 작업이 포함됩니다. 불행히도 이것은 피할 수없는 일입니다.관계형 데이터와 플랫 파일

 
     TABLE A        TABLE B 
------------------- 1 -> MANY  ---------------------------- 
    A_KEY FIELD_A      B_KEY A_KEY FIELD_B 
A_KEY_01 A_VALUE_01     B_KEY_01 A_KEY_01 B_VALUE_01 
A_KEY_02 A_VALUE_02     B_KEY_02 A_KEY_01 B_VALUE_02 
            B_KEY_03 A_KEY_02 B_VALUE_03 

이가 될 것이다 :

 
A_KEY  FIELD_A  B_KEY1  FIELD_B1  B_KEY2  FIELD_B2 
A_KEY_01 A_VALUE_01 B_KEY_01 B_VALUE_01 B_KEY_02 B_VALUE_02 
A_KEY_02 A_VALUE_02 B_KEY_03 B_VALUE_03 

TABLE A에서 각 항목은 하나의 출력 플랫 파일에서 하나 개의 행이있을 것이다

는 여기에 필요한 것 변환의 매우 간단한 예입니다 관련 분야별 열은 TABLE B입니다. 출력 파일의 열은 TABLE B에서 얻은 필드에 대해 빈 값을 가질 수 있습니다.

매우 너비의 파일이 생성된다는 것을 알고 있지만 이것이 필수 사항입니다. 나는 MapForce와 Apatar를 보았습니다. 그러나이 문제는 너무 기괴하거나 제대로 사용할 수 없다고 생각합니다.

내 질문 : 이미 이것을 달성 할 수있는 도구가 있습니까? 아니면 처음부터 다시 개발해야합니까? (나는 바퀴를 재발 명하고 싶지 않습니다)?

+0

이 표준입니다 :> 3의 MAX 다음과 같은 평범한 SQL 작동하도록 데이터로 변경되지 않습니다이 제약은 이제 정적 - 그것이 나오는 것에 관계는 하나입니다 "결과의 열에 테이블의 행"질문? 이것은 기괴하지 않다, 그것은 일반적이다. SO 및 Google에서 "결과 행에 테이블 행"을 검색하십시오. 읽은 내용을 토대로 특정 질문으로 업데이트하십시오. –

+0

고마워, 나는 주변을 잘 살펴 보았지만 똑같은 문제는 발견하지 못했다. 아마도 나는 스스로를 분명히하지 않을 것이다. 이 질문의 미묘함을 더 분명하게 할 수있는 방법에 대해 생각해 보겠습니다. – Anthony

답변

0

감사합니다.

 
select A.A_KEY, A.FIELD_A, B.B_KEY, B.FIELD_B, B2.B_KEY, B2.FIELD_B, B3.B_KEY, 
B3.FIELD_B 

from 

A left join B on (A.A_KEY = B.A_KEY) 
left join B B2 on (A.A_KEY = B2.A_KEY and B2.B_KEY != B.B_KEY) 
left join B B3 on (A.A_KEY = B3.A_KEY and B3.B_KEY != B.B_KEY 
        and B3.B_KEY != B2.B_KEY) 

group by A.A_KEY 
order by A.A_KEY 
0

일반 SQL에서는이 문제를 해결할 수 없지만 RDBMS에 따라 저장 프로 시저 또는 이와 유사한 것을 만들 수 있습니다. 그렇지 않으면 스크립팅 언어로하는 것이 상당히 쉽습니다. 어떤 기술을 사용하고 있습니까?

+0

RDBMS의 경우 가능한 한 기술을 불가지론하는 솔루션이어야합니다. 내 코드를 데이터베이스 공급 업체에 연결하지 않고도이 코드를 작성할 수 있습니다. 몇 가지 솔루션이 거의 존재하지만 모든 것이 아닌 것처럼 보입니다. – Anthony

+0

그런 경우 Python이나 이와 유사한 스크립트 언어를 사용할 수 있습니다. 아마 20 줄의 코드 일 것입니다. – troelskn

관련 문제