MS ACCESS中的GROUP BY和SUMS

时间:2014-06-24 14:52:10

标签: sql group-by sum ms-access-2007

我试图得到一份报告,说明有多少商品已售出,特别是在数量和价格方面哪一种卖得更多。

我正在尝试上述查询,认为使用[PRICE]*[total]表达式中的group by,它可以正常工作。不幸的是,它没有。我也尝试通过表达式将别名放在组中,但仅此而已,它只表示我需要为列使用分组表达式:[PRICE]*[total]这是我认为我已经完成的。

SELECT TOP 20 ARTIC, Sum(TOTGIA) AS total, [PRICE]*[total] AS a
FROM Car
GROUP BY ARTIC, [PRICE]*[total]
ORDER BY Sum(TOTGIA) DESC;

任何人都可以引导我走向好方向吗?

错误是:

"You tried to execute a query that does not include the specified expression '[PRICE]*[total]' as part of an aggregate function."

表格是这样的:

|artic|totgia|price
+++++++++++++++++++
|aaa  |  1   | 10
|aaa  |  4   | 10
|bbb  |  1   | 200

我想:

|aaa| 5 | 50
|bbb| 1 | 200

所以aaa是销售数量的第一个,但bbb首先是现金

1 个答案:

答案 0 :(得分:1)

这里的问题是你试图在select和group by中使用总别名。您目前无法访问别名。相反,您需要引用实际的列值来代替总数。在其他情况下,您可以创建一个子选择并使用别名,但这不适用于您编写的查询。

SELECT TOP 20 ARTIC, Sum(TOTGIA) AS total, PRICE*Sum(TOTGIA) AS a
FROM Car
GROUP BY ARTIC, PRICE
ORDER BY Sum(TOTGIA) DESC;

如果您的文章列出了几种不同的价格,则此查询将返回多行。所以,这个数据:

|artic|totgia|price
+++++++++++++++++++
|aaa  |  1   | 10
|aaa  |  4   | 20
|bbb  |  1   | 200

会返回这些结果:

|aaa| 1 | 10
|aaa| 4 | 80
|bbb| 1 | 200

这种情况会发生,因为我们特意告诉sql我们希望将独特的文章和价格作为自己的行。但是,这可能是一件好事,因为在上面的场景中,您不希望返回aaa的数量为5,值为50,因为总值为90.如果这是您的数据的可能情况,您可以将此查询转换为子选择,并将唯一文章的所有数据组合在一起。