1

我有一个表,其中“月”作为列,“客户 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<>99999 的平均值,并在第二列中计算Dec11<>99999 的平均值。

4

3 回答 3

0

在这种情况下,使用 GROUP BY 会很方便。

如果您有不同的月份值,例如“jan10”、“feb10”、“mar12”等,您可以按月份分组,然后检查这些值是否不是 99999。

SELECT avg(value), months
FROM tablename 
WHERE value <> 99999
GROUP BY months

也就是说,如果您将月份存储为列中的文字,但根据您的数据库设计,这可能以其他方式存储?

于 2013-10-12T22:00:45.503 回答
0

我需要将每个月分开,即计算Dec10<>99999 的平均值,并在第二列中计算Dec11<>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         
于 2013-10-13T10:04:26.317 回答
0

您需要在查询中使用 Group By 子句,然后您可以按月分隔输出。

于 2013-10-12T21:52:16.193 回答