2014-06-24 43 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

您描述的行爲正是我正在搜索的內容,如果文章有不同的價格,則必須顯示不同的行,非常感謝! –