INNER JOIN 多个表 - 访问

INNER JOIN Multiple tables - access

我在这里是因为我正在查询。

我有一个像这样的 table,叫做 t :

Order_ID
Product_ID  
Quantity
Discount
Revenue
Cost
Year
Supplier_ID
Customer_ID
Employee_ID  

从这个查询中我想获得类似的东西:

Product_ID
Quantities_ordered_2013
Tot_Revenue_2013
Quantities_ordered_2014
Tot_Revenue_2014
Quantities_ordered_2015
Tot_Revenue_2015

我创建了 3 个子查询来按每年的产品信息分组,如下所示:

   SELECT t.FK_Product_ID, Count(t.FK_Order_ID) AS Orders_2013, Sum(t.Revenue) AS Revenue_2013
FROM t
WHERE (((t.Year)=2013))
GROUP BY t.FK_Product_ID AS 2013_Product

创建 3 个 table 后,如何将它们合并在一起以获得我的 table?

考虑条件聚合,您将 WHERE 条件移动到 IIF() 表达式中,以便使用 COUNTSUM 进行聚合。无需加入。此外,使用 table 别名以避免重复长 table 名称(最好不要以数字或特殊字符开头)。

SELECT t.FK_Product_ID AS Product 
       , SUM(IIF(t.[Year]=2013, 1, 0) AS Orders_2013
       , SUM(IIF(t.[Year]=2013, Revenue, 0) AS Revenue_2013
       , SUM(IIF(t.[Year]=2014, 1, 0) AS Orders_2014
       , SUM(IIF(t.[Year]=2014, Revenue, 0) AS Revenue_2014
       , SUM(IIF(t.[Year]=2015, 1, 0) AS Orders_2015
       , SUM(IIF(t.[Year]=2015, Revenue, 0) AS Revenue_2015
FROM 12_A1_Q3_01_Denormalized t
GROUP BY t.FK_Product_ID 

或者,MS Access 保持唯一性 cross tab query。但是,由于此特殊查询一次以一个聚合为中心,因此您需要在最后加入多个基础查询:

TRANSFORM COUNT(*) AS Orders
SELECT t.FK_Product_ID AS Product 
FROM 12_A1_Q3_01_Denormalized t
GROUP BY t.FK_Product_ID 
PIVOT t.[Year] IN ([2013], [2014], [2015])
TRANSFORM SUM(t.[Revenue]) AS Revenue
SELECT t.FK_Product_ID AS Product 
FROM 12_A1_Q3_01_Denormalized t
GROUP BY t.FK_Product_ID 
PIVOT t.[Year] IN ([2013], [2014], [2015])
SELECT t.FK_Product_ID AS Product
       , o.[2013] AS Orders_2013
       , r.[2013] AS Revenue_2013 
       , o.[2014] AS Orders_2014
       , r.[2014] AS Revenue_2014 
       , o.[2015] AS Orders_2015
       , r.[2015] AS Revenue_2015 

FROM OrdersCrossTabQuery o
INNER JOIN RevenueCrossTabQuery r
   ON o.[Product] = r.[Product]