I have two tables detail and head. The detail table will be written first. Later, the head table will be written. The head is a summary of the detail table. I would like to keep a reference from the detail to the head table. I have a solution but it is not elegant and requires duplicating the joins and filters that were used during summation. I am looking for a better solution. The below is an example of what I currently have. In this example, I have simplified the table structure. In the real world, the summation is very complex.
-- 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
Desired end result of detail table:
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