我有四个访问表。
Invoices (Date, JobNumber)
PO1 (Cost, JobNumber)
PO2 (Cost, JobNumber)
PO3 (Cost, JobNumber)
所有人都有一个名为JobNumber的连接列。 我已经在两个日期之间对发票进行查询,以创建一个JobNumbers表。
SELECT JobNumber FROM Invoices WHERE (Date > "startDate") AND (Date < "endDate") INTO tempTable;
我更习惯使用PHP的SQL Server和mySQL,其中接下来的步骤使用临时表和多行SQL是微不足道的。但Access Query设计器不允许这样的事情。所以我不确定如何在Access中的4个表中设计查询。我现在想要PO1到PO3:
SELECT SUM(PO1.Price) AS TotalPrice FROM P01,tempTable WHERE PO1.JobNumber=tempTable.JobNumber;
然后返回该JobNumber的所有成本的总和。 欢迎任何指示。
答案 0 :(得分:4)
SQL内置了连接方式,在这种情况下,您不需要使用临时表。如果您进入设计查询然后选择SQL视图,则以下查询应生成超过PO1,PO2和PO3的总计。
Select
i.JobNumber,
Sum(c.Cost) as TotalCost
From
Invoices as i
Left Outer Join (
Select
Cost,
JobNumber
From
PO1
Union All
Select
Cost,
JobNumber
From
PO2
Union All
Select
Cost,
JobNumber
From
PO3
) as c
On i.JobNumber = c.jobNumber
Where
i.Date >= #StartDate# And
i.Date < #EndDate#
Group By
i.JobNumber
这里有很多活动部件。您可以做的第一件事就是为内部选择创建单独的查询。因此,创建一个名为AllPO的查询,其定义如下:
Select
Cost,
JobNumber
From
PO1
Union All
Select
Cost,
JobNumber
From
PO2
Union All
Select
Cost,
JobNumber
From
PO3
然后您可以将第一个查询重新定义为
Select
i.JobNumber,
Sum(c.Cost) as TotalCost
From
Invoices as i
Left Outer Join
AllPO as c
On i.JobNumber = c.jobNumber
Where
i.Date >= #StartDate# And
i.Date < #EndDate#
Group By
i.JobNumber
这有点像使用临时表,除非查询优化器可以使用更有效的技术,如果它可以找到一个。