2017-04-27 36 views
0

我试图执行一个查询,显示结果是供应商(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说,这是因为我包括在SELECTComm_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条款中包含每个查询?

+0

一般的GROUP BY规则说:“如果指定了GROUP BY子句,则SELECT列表中的每个列引用都必须标识分组列或作为set函数的参数。” – jarlh

+1

你没有对你的陈述进行任何分组。如果您只是希望将它们一起订购,请将它们添加到order by子句中。 –

+1

按Supp_Code分组时,每个Supp_Code会得到一个结果行。由于表格中的一个Supp_Code可能有多个记录,因此它的Comm_Codes中的哪一个,它的哪个AqYears,哪个Product_Codes等是你想要在结果行中看到的?你需要指定这个,例如MAX(Comm_Code),MIN(AqYear),... –

回答

2

我认为你只是在寻找一个非聚集查询有两个ORDER BY键:

SELECT [Comm_Code], [Supp_Code], [AqYear], [Product_Code], [Type], [Customer_Code], 
     [Commission_Rate], [cType] 
FROM [Acquisition Commission] 
ORDER BY [Supp_Code], [Comm_Code]; 

GROUP BY查询通常具有聚合函数,如COUNT()SUM()

0
-- group by Id & order by Name 

    SELECT id, name, dob FROM test GROUP BY id ORDER BY name 

尝试这样的事情..

干杯!