2013-03-06 75 views
1

我有两个表。一个是InvoiceHeader,另一个是InvoiceDetails。我在InvoiceHeader中有一个名为total的字段,我想从InvoiceDetails表中计算与该InvoiceID相关的所有成本。使用派生字段

我可以这样做的最简单方法是什么?

我也在使用Access。如果您有任何疑问,请询问。

回答

0

假设成本值存储在名为在InvoiceDetailscost数字领域,InvoiceID也是两个表中的数字字段...

SELECT 
    ih.*, 
    DSum("cost", "InvoiceDetails", "InvoiceID = " & ih.InvoiceID) 
     As total_cost 
FROM InvoiceHeader AS ih; 

或者你可以使用一个聚集查询计算每个InvoiceID的总数并加入到InvoiceHeader

SELECT ih.*, sub.total_cost 
FROM 
    InvoiceHeader AS ih 
    INNER JOIN 
    (
     SELECT InvoiceID, Sum(cost) AS total_cost 
     FROM InvoiceDetails 
     GROUP BY InvoiceID 
    ) AS sub 
    ON ih.InvoiceID = sub.InvoiceID; 

如果你的表是足够大,以发现那些2种方法之间的速度差,我的猜测是第二会更快。无论您选择哪一个,都将从InvoiceDetails.InvoiceID的索引中受益匪浅。

+0

工作完美。谢谢 – Niall2k12 2013-03-06 20:54:56

+0

我还没有创建数据库。我只是使用一些示例数据并找出我需要的查询。将是一个相当小的数据库,因为它只是一个大学项目。我个人喜欢你提供的第二种解决方案,这就是我将要采用的方案。在考虑我在数据库方面我还是个新手之前,我从来没有见过这样做。感谢你的帮助。 – Niall2k12 2013-03-06 21:27:57