Ms-Access

訪問無法分組數據!

  • October 3, 2018

在本例查詢中,

SELECT [Account Transactions].ID, [Account Transactions].Transaction_Amount, *
FROM [Account Transactions]
GROUP BY [Account Transactions].ID, [Account Transactions].Transaction_Amount;

這個想法是對帳戶 Transaction.ID 進行分組,並為同一 ID 的所有交易擷取 tracaction_amount 的總和。

程式碼由 Access 2016 生成,執行時我得到:

不能對帶有“*”的欄位進行分組

有趣的是,我可以生成具有相同分組的報告,並且效果很好。

分組可能是相同的,但您在所選欄位的末尾有一個星號(選擇所有欄位的快捷方式,但順序未知,阻止分組和聚合)會導致錯誤。

如果你想得到Transaction_Amount每人的總和,ID你只需分組而ID不是按Transaction_Amount

SELECT
   Sum([Account Transactions].Transaction_Amount) As SumAmount
 , [Account Transactions].ID
FROM
   [Account Transactions]
GROUP BY
   [Account Transactions].ID

ComputerVersteher的回答涉及到這一點,但要更明確地解決它:

Access 會準確地告訴您問題所在。在列表中使用GROUP BY時不能使用。*``SELECT

請注意,這SELECT *表示在執行語句時包含表中的每一列。在您的情況下,您實際上包含了IDTransaction_Amount列的第二個副本。

所以,首先 - 在您的SELECT列表中有多個具有相同名稱/別名的列是一個壞主意。如果你真的想擁有IDTransaction_Amount包含多次,最好提供一個別名,這樣結果集中的列都有唯一的名稱。

帶有 a 的 SQL 語句GROUP BY對列表中的內容有限制SELECT。列表中的每一列都SELECT應該在GROUP BY列表中,或者應該在聚合函式中(如SUM())。根據定義,使用 包含的所有列*都不能在聚合函式中。您不能*GROUP BY子句中使用。由於您必須在 中明確指定列GROUP BY,因此如果將任何新列添加到表中,您將自動獲得無效語句。因此,Access 會阻止您一起使用SELECT *GROUP BY

您確定您沒有修改 Access 生成的程式碼嗎?如果它會生成無法執行的程式碼,我會感到驚訝。

引用自:https://dba.stackexchange.com/questions/219111