【问题标题】:Ordering By a Group By Query通过查询按组排序
【发布时间】: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


【解决方案1】:

我认为您只是在寻找具有两个 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()

【讨论】:

    【解决方案2】:
    -- group by Id & order by Name
    
        SELECT  id, name, dob  FROM  test  GROUP BY  id   ORDER BY  name
    

    试试这样的..

    干杯!!

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2017-10-16
      • 2019-09-27
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多