2016-08-02 2 views
0

얼마 전부터 우리는 구매 데이터를 저장하기 위해 Excel 파일을 사용 해왔다. 이 스프레드 시트 파일의 구조는 동일합니다. 꽤 많은 속성이 있기 때문에 가장 중요한 속성의 이름을 지정하려고합니다.SSIS - 반복 열

이 Excel 파일에는 제품 ID, 각 제품의 크기 및 제품 ID와 크기의 각 조합에 대한 수량에 대한 열이 있습니다.

우리는 여러 점포가 있고 각 점마다 제품마다 다른 수량을 받았습니다. 따라서 각 Excel에는 각 상점에 대한 열이 있습니다. 각 열에는 각 복합 요소에서 주문한 수량을 배치합니다.

enter image description here

그래서, 내가 뭘 원하는 특정 저장소에 각 복합체의 해당 수량을 추가 할 각 점포의 컬럼을 통해 루프입니다. 예를 들어

,

INSERT INTO MyTable (product_ID, size_ID, store_ID, quantity) 
    VALUES (12345, 34, Mirkwood, 1) 

하고, 각 열에 대해 반복한다.

나는이 문제에 대한 해결책을 찾으려고 노력했지만 아직 해결하지 못했습니다. 나는 정말로 모든 도움이나 조언에 감사 할 것입니다.

답변

0

당신은 UNPIVOT 구성 요소에게 당신이 행으로 변환 할 필요가 열 것입니다 확인

열을 사용할 수 있습니다. 대상 열은 데이터를 넣을 열입니다. 피벗 키 값 열 이름 : 피벗 열의 이름입니다.

enter image description here

그 후

enter image description here

, 당신은 일반적으로 행을 삽입 할 수 있습니다.

SQL을 사용하는 다른 방법은 t-sql을 사용하는 것이지만 다른 데이터베이스는 비슷한 것이 있어야합니다. 먼저 원시 데이터를 표로 가져옵니다. 그런 다음 unpivot을 사용하여 위와 유사한 작업을 수행하십시오.

CREATE TABLE #pvt (VendorID int, Emp1 int, Emp2 int, 
     Emp3 int, Emp4 int, Emp5 int); 
    GO 
    INSERT INTO #pvt VALUES (1,4,3,5,4,4); 
    INSERT INTO #pvt VALUES (2,4,1,5,5,5); 
    INSERT INTO #pvt VALUES (3,4,3,5,4,4); 
    INSERT INTO #pvt VALUES (4,4,2,5,5,4); 
    INSERT INTO #pvt VALUES (5,5,1,5,5,5); 
    GO 

    select * from #pvt 

    --Unpivot the table. 
    SELECT VendorID, Employee, Orders – destination table, first column is row group? 
    FROM 
     (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5 
     FROM #pvt) p – detail source 
    UNPIVOT 
     (Orders FOR Employee IN –orders: data, For: column group 
      (Emp1, Emp2, Emp3, Emp4, Emp5) 
    )AS unpvt; 

이 접근법의 유일한 문제점은 더 많은 열 (저장소)이 추가되면 처리 할 수 ​​없다는 것입니다. 하지만 동적으로 만들 수 있습니다. https://www.mssqltips.com/sqlservertip/3002/use-sql-servers-unpivot-operator-to-dynamically-normalize-output/

+0

우수! 그것은 내가 필요로했던 바로 그 것이었다. 시간 내 주셔서 감사합니다. –

1

SSIS에서 복잡하고 동적 인 반복 코드를 만들지 마십시오.

흐름을 분할하면 product_id, size_id 및 하나의 저장소에 대한 데이터를 가지므로 훨씬 간단합니다. 각 상점에 대해 이미 알고있는 store_id을 사용하여 삽입하십시오.

루핑 솔루션이 좋게 들릴 수도 있지만 새 저장소를 추가 할 때 코드를 업데이트 할 필요가 없지만 SSIS에서는 구현하기가 복잡 할 것이므로 매장을 추가하지 않는 것으로 추측합니다. 보람있는 노력을 자주하십시오.

+0

팁 주셔서 감사합니다. 아주 그럴듯하고 구현하기 쉽다. –