2009-07-03 5 views
0

행 데이터 (1 차 키 없음)가있는 테이블이 1 개 있습니다. 기본 키가있는 다른 키.복잡한 삽입을 통해 저장 프로 시저

행 데이터 테이블에는 3 개의 직경에 대해 여러 레코드가 있습니다. 그리고 다른 10 필드는이 세 가지 값에 대한 모든 레코드에서 같은 값을 갖습니다.

예 :

aa bb cc dd ee ff gg hh ii p1 p2 p3   V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 5 2 3 4 
a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 10 1 4 4 

내 테이블에 삽입 할 컬럼 P1, P2, P3에 의해

aa bb cc dd ee ff gg hh ii p1 p2 p3   V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 15 3 7 8 

만 하나 개의 레코드 그룹 ...

어느 한 방법으로 저를 제안 할 수처럼 쓰기 SP 이거 ??

하나의 커서를 열 p1, p2, p3으로 정의했습니다.

먼저 이러한 유형의 레코드가 마스터에 있는지 여부를 확인 하시겠습니까? 내 마스터 테이블에서와 마찬가지로 기본 키는이 지름을 기반으로합니다.

그런 다음 gorup을 사용하여 쿼리를 작성했습니다. ... ??

하지만 올바른 방법입니까?

안내하시기 바랍니다 .. 미리

감사합니다 ..

답변

0

오이 - 여기 더 커서, 친구. 필요 없음. 이 시도 :

INSERT MyDetailTable (aa, bb, cc, dd, ee, ff, gg, hh, ii, p1, p2, p3, V1, V2, V3, V4) 
SELECT d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3, SUM(d.V1), SUM(d.V2), SUM(d.V3), SUM(d.V4) 
FROM MyDetailTable d 
JOIN MyMasterTable m ON d.p1 = m.p1 
    AND d.p2 = m.p2 
    AND d.p3 = m.p3 
GROUP BY d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3 

(가)에만 이런 경우가 확인하기 위해 외래 키 제약 조건을 사용해야합니다 있지만 PK는 (마스터 테이블에 있는지 확인하기 위해 존재 가입 - 그래서 당신은 확인할 필요가 없습니다 세부 사항 테이블에 대해 실행하는 모든 명령문에 마스터 레코드가 있음). 그룹화는 각 행의 '공통'입력란별로 그룹화합니다. aa, bb, cc ..... p1, p2, p3으로 그룹화하는 대신 p1, p2, p3로 그룹화하고 MAX (aa), MAX (bb)를 사용할 수 있습니다. 원할 경우 ... 정말 너까지.