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()
表达式中,以便使用 COUNT
和 SUM
进行聚合。无需加入。此外,使用 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]
我在这里是因为我正在查询。
我有一个像这样的 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()
表达式中,以便使用 COUNT
和 SUM
进行聚合。无需加入。此外,使用 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]