【发布时间】:2017-09-25 00:29:45
【问题描述】:
我正在尝试执行查询以显示按供应商 (Supp_Code) 分组的结果,然后在每个组中,结果按按委员会排序代码 (Comm_Code)。
以下查询:
sql = "SELECT [Comm_Code], [Supp_Code], [AqYear], [Product_Code], [Type], [Customer_Code], " & _
"[Commission_Rate], [cType] FROM [Acquisition Commission] GROUP BY [Supp_Code] " & _
"ORDER BY [Comm_Code]"
Dim da As New OleDbDataAdapter(sql, con)
Dim ds As New DataSet
Dim dt As New System.Data.DataTable
da.Fill(ds)
给出错误:
您尝试执行的查询不包含指定表达式“Comm_Code”作为聚合函数的一部分。
我查了一下,this answer 说这是因为我在SELECT 中包含了Comm_Code,但没有包含GROUP BY。
所以,我把它改成了:
sql = "SELECT [Comm_Code], [Supp_Code], [AqYear], [Product_Code], [Type], [Customer_Code], " & _
"[Commission_Rate], [cType] FROM [Acquisition Commission] GROUP BY [Supp_Code] " & _
"ORDER BY [Comm_Code]"
但后来我得到了同样的错误,但 AqYear 字段。
这将继续下去,直到我将所有选定的字段都包含在 GROUP BY 子句中......这肯定会给我错误的输出,但即使不是,它似乎也有很多不必要的查询。
是否有更快/更好的方法来实现我想要做的事情?还是我只需要在GROUP BY 子句中包含每个查询?
【问题讨论】:
-
一般 GROUP BY 规则说:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。”
-
您没有对您的声明进行任何分组。如果您只想将它们一起订购,请将它们添加到 order by 子句中。
-
当您按 Supp_Code 分组时,每个 Supp_Code 获得一个结果行。由于表中的一个 Supp_Code 可能有许多记录,您希望在结果行中查看它的 Comm_Codes、它的 AqYears、它的 Product_Codes 等的哪些记录?您需要指定这一点,例如MAX(Comm_Code), MIN(AqYear), ...
标签: sql ms-access select group-by sql-order-by