我有两张桌子细节和头部。详细信息表将首先编写。之后,将编写头表。头部是详细信息表的摘要。我想从细节到头表保持参考。我有一个解决方案,但它不优雅,需要复制求和过程中使用的连接和过滤器。我正在寻找更好的解决方案。以下是我目前拥有的一个例子。在这个例子中,我简化了表结构。在现实世界中,总和非常复杂。
-- 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 :(得分:3)
为什么不先插入head
行,然后在插入detail
行时加入头?换句话说,如果您知道将要用于详细记录的不同代码(示例中的A和B),您可以继续将它们插入head
表中。然后,您可以在之后插入detail
条记录,加入head以获取相应代码的head_id
值。
答案 1 :(得分:0)