我在 MS Access 中有一个表,其中包含年份、期间(值只是
1
和 2
)、Costs_Per_Capita 和 CALCULATED_Period_Avg_Costs,PK 是 ID。
我需要计算
CALCULATED_Period_Avg_Costs
。它应该从 Costs_Per_Capita
列返回给定时间段内 Period
的平均值。在 Excel 中,我使用 SUMIF/COUNTIF 执行此操作,它返回平均 IF。
您对如何用 SQL 编写代码来做到这一点有什么建议吗?
结果应如下所示:
Costs_Per_Capita Period CALCULATED_Period_Avg_Costs
15,505 1 15976.27582
16,368 1 15976.27582
16,037 1 15976.27582
15,995 1 15976.27582
15,000 2 16000
17,000 2 16000
我使用的语句:
SELECT
Costs_Per_Capita, Period
IFF (Period = 1,
(Select AVG(Costs_Per_Capita) From Costs Where Period = 1),
(Select AVG(Costs_Per_Capita) From Costs Where Period = 2)
AS result
FROM Costs;
仍然出现“查询表达式中存在语法错误(缺少运算符)...”
我想我知道您在要求什么,并且我相信这就是您正在寻找的 -
Select
Costs_Per_Capita,
Related_Period_ID,
(Select
Case when Related_Period_ID = 1 then
(Select
AVG(Costs_Per_Capita)
From Costs_Per_Capita_Table
Where Related_Period_ID = 1)
else
(Select
AVG(Costs_Per_Capita)
From Costs_Per_Capita_Table
Where Related_Period_ID = 2)
END
)
From
Costs_Per_Capita_Table
将 CASE 更改为 IFF
Select
IFF (Related_Period_ID = 1,
(Select
AVG(Costs_Per_Capita)
From Costs_Per_Capita_Table
Where Related_Period_ID = 1),
(Select
AVG(Costs_Per_Capita)
From Costs_Per_Capita_Table
Where Related_Period_ID = 2)
我是这样做的: 选择成本.人均成本、成本.期间、
IIF(成本.期间 = 1,
(从周期 = 1 的成本中选择 AVG(Costs_Per_Capita)),
(从期间 = 2 的成本中选择 AVG(人均成本)))
AS结果
来自成本;
另一种方式,如果有更多的周期,更好的是使用子查询:
选择 Costs.Period、Costs_Per_Capita、tmpQry.CALCULATED_Period_Avg_Costs
FROM Costs INNER JOIN (SELECT Costs.Period, Avg(Costs.Costs_Per_Capita)
根据成本计算的_期间_平均_成本
GROUP BY Costs.Period) AS tmpQry ON Costs.Period = tmpQry.Period;
也许以后有人会用它......
Select CostsPerCapital, Period, avg(CostPerCapita) over (partition by Period)
From Table
Where....
Order by ...