2014-06-24 2 views
0

Я пытаюсь получить отчет о том, сколько статей было продано, особенно тот, который был продан больше, как по количеству, так и по цене.GROUP BY и SUMS в MS ACCESS

Я пробую вышеуказанный запрос, считая, что использование [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 является первым за наличные

+0

Удаленный тег mysql, потому что синтаксис явно MS Access. –

+0

Хотя я не совсем понимаю цель запроса, синтаксис должен работать. Что происходит не так? –

+0

Следует ли вам группировать «a» вместо [PRICE] * [total]? – RadioActiveEd

ответ

1

Проблема заключается в том, что вы пытаетесь использовать общий псевдоним в select и в группе. В настоящее время у вас нет доступа к псевдониму. Вместо этого вам нужно будет либо ссылаться на фактические значения столбца вместо общего. В других случаях вы можете создать подзапрос и использовать псевдоним, но это не относится к вашему запросу, поскольку оно написано.

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

поведение, которое вы описываете, именно то, что я ищу, в случае, если статья имеет разные цены, вам нужно показать разные строки, большое вам спасибо! –