我有一个表有“月”作为列,“客户ID”作为主键。
我希望将每个月的所有值分别平均为不等于99999的值。
我对单个月的当前查询如下,并且工作正常:
SELECT Avg([Table1]![Dec10]) AS Expr1
FROM Table1
WHERE ((([Table1]![Dec10])<>99999);
然而,当我试图添加第二个月时,它将第一个月的条件与第二个月的条件相结合。
SELECT Avg([Table1]![Dec10) AS Expr1, Avg([Table1]![Dec11]) AS Expr2
FROM Table1
WHERE ((([Table1]![Dec10])<>99999) And ([Table1]![Dec11])<>99999);
我需要将每个月分开,即计算Dec10&lt; 99999的平均值,并在第二列中计算Dec11&lt; 99999的平均值。
答案 0 :(得分:0)
您需要在查询中使用Group By子句,然后您可以按月分隔输出。
答案 1 :(得分:0)
在这种情况下,使用GROUP BY会很方便。
如果您有不同的月份值,例如“jan10”,“feb10”,“mar12”等您可以在几个月内分组,然后检查值是否为99999.
SELECT avg(value), months
FROM tablename
WHERE value <> 99999
GROUP BY months
也就是说,如果您将月份存储为列中的文字,但是从数据库设计中可以以其他方式存储?
答案 2 :(得分:0)
我需要将每个月分开,即计算Dec10&lt; 99999的平均值,并在第二列中计算Dec11&lt; 99999的平均值。
在Access 2010中,对于[表1] ...
CustomerID Dec10 Dec11
---------- ----- -----
1 1 5
2 2 99999
3 99999 0
4 3 7
...查询...
SELECT
DAvg("Dec10", "Table1", "Dec10<>99999") AS AvgOfDec10,
DAvg("Dec11", "Table1", "Dec11<>99999") AS AvgOfDec11
FROM (SELECT COUNT(*) AS n FROM Table1)
...生产:
AvgOfDec10 AvgOfDec11
---------- ----------
2 4