2014-06-24 46 views
0

我试图获得已经售出多少文章的报告,尤其是哪一款在数量和价格方面都更加畅销。GROUP BY和SUMS在MS ACCESS

我在尝试上面的查询,认为在group by表达式中使用[PRICE]*[total]它可以工作。不幸的是它不。我也尝试通过表达式将别名放入组中,但仅此而已,它只是说我需要对列使用分组表达式:[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首先是现金

+0

删除了mysql标签,因为语法显然是MS Access。 –

+0

虽然我不完全理解查询的意图,但语法应该可以工作。出了什么问题? –

+0

你应该用'a'而不是[PRICE] * [全部]来分组吗? – RadioActiveEd

回答

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.如果这是数据可能的情况,您可以将此查询变为子查询并将独特文章的所有数据组合在一起。

+0

您描述的行为正是我正在搜索的内容,如果文章有不同的价格,则必须显示不同的行,非常感谢! –