我有四张桌子。
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和mySQL,使用临时表和多行SQL,接下来的步骤非常简单。但是Access查询设计器不允许这样的事情。因此,我不知道如何在Access中设计跨4个表的查询。我现在想为PO1到PO3做些什么:
SELECT SUM(PO1.Price) AS TotalPrice FROM P01,tempTable WHERE PO1.JobNumber=tempTable.JobNumber;
然后返回该JobNumber的所有成本之和。任何指示都欢迎。
发布于 2013-10-12 12:20:27
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
这里有很多活动部件。要理解它,首先要做的是为内部select创建一个单独的查询。因此,创建一个名为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
这有点像使用临时表,但查询优化器可以自由使用更高效的技术(如果可以找到的话)。
https://stackoverflow.com/questions/19333738
复制相似问题