2010-12-21 2 views
0

두 개의 테이블과 머리가 있습니다. 세부 테이블이 먼저 작성됩니다. 나중에 헤드 테이블이 작성됩니다. 머리 부분은 세부 테이블의 요약입니다. 세부 사항에서 헤드 테이블에 대한 참조를 유지하고 싶습니다. 나는 솔루션을 가지고 있지만 우아한 것은 아니며 합산 중에 사용 된 조인과 필터를 복제해야합니다. 나는 더 나은 해결책을 찾고있다. 아래는 현재 제가 가지고있는 예입니다. 이 예제에서는 테이블 구조를 단순화했습니다. 실제 세계에서는 합계가 매우 복잡합니다. 세부 테이블의select-insert 문에서 자동 생성 된 ID를 추적하는 방법

-- Preparation 
create table #detail (
     detail_id int identity(1,1) 
    , code char(4) 
    , amount money 
    , head_id int null 
    ); 

create table #head (
     head_id int identity(1,1) 
    , code char(4) 
    , subtotal money 
    ); 

insert into #detail (code, amount) values ('A', 5); 
insert into #detail (code, amount) values ('A', 5); 
insert into #detail (code, amount) values ('B', 2); 
insert into #detail (code, amount) values ('B', 2); 


-- I would like to somehow simplify the following two queries 
insert into #head (code, subtotal) 
    select code, sum(amount) 
    from #detail 
    group by code 

update #detail 
    set head_id = h.head_id 
from #detail d 
    inner join #head h on d.code = h.code 

-- This is the desired end result 
select * from #detail 

원하는 최종 결과 :

 
    detail_id code amount head_id 
    1   A  5.00 1 
    2   A  5.00 1 
    3   B  2.00 2 
    4   B  2.00 2 

답변

0

당신의 주제에서 나는 이것을 말할 것입니다.

OUTPUT clause을 보았습니까?

이렇게하면 임시 테이블이 필요 없도록 ID에 변수를 할당 할 수 있습니다. 제안에 대한

그러나 당신의 몸에서 난 정말 당신이 무슨 일을하는지 이해가 안

...

+0

가능성이 있습니다. 나는 이것을 조사 할 것이다. 감사! –

+0

OUTPUT 절을 사용하여 쿼리를 다시 작성했으며 훨씬 더 명확합니다. 도와 주셔서 감사합니다! –

3

가 왜 그냥 먼저 head 행을 삽입하고 detail 행을 삽입 할 때 다음 머리에 가입? 즉, 세부 레코드 (예에서 A와 B)에 사용할 고유 코드를 알고있는 경우 테이블로 가서 head 테이블에 삽입 할 수 있습니다. 그런 다음 detail 개의 레코드를 삽입 한 후 헤드에 합류하여 해당 코드의 head_id 값을 얻을 수 있습니다.

+0

헤드 기록을 생성하는 과정에서 별도입니다 세부 레코드를 생성하는 과정,하지만 감사합니다. –

+0

+1 : 이것은 학부모/자녀 관계의 규정입니다. –

관련 문제