我试图执行一个查询,显示结果是由供应商(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)
给出了一个错误:
You tried to execute a query that does not include the specified expression 'Comm_Code' as part of an aggregate function.
我看这件事,并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列表中的每个列引用都必须标识分组列或作为set函数的参数。” – jarlh
你没有对你的陈述进行任何分组。如果您只是希望将它们一起订购,请将它们添加到order by子句中。 –
按Supp_Code分组时,每个Supp_Code会得到一个结果行。由于表格中的一个Supp_Code可能有多个记录,因此它的Comm_Codes中的哪一个,它的哪个AqYears,哪个Product_Codes等是你想要在结果行中看到的?你需要指定这个,例如MAX(Comm_Code),MIN(AqYear),... –