【问题标题】:How to group rows of the table without using Aggregate functions?如何在不使用聚合函数的情况下对表的行进行分组?
【发布时间】:2013-07-23 08:39:51
【问题描述】:

示例:

SELECT 
   Equip.name, equip.type, region.regionname, region.equipfk 
FROM 
   Equip 
INNER JOIN 
   region on Equip.equippk = region.equipfk   
GROUP BY 
   Equip.Name, region.equipfk                  

预期输出:

name    type       regionname    equipfk 
----------------------------------------
TCT     Steel      detroit       8235
TCT     steel      detroit       8235
GTH     COPPER     michigan      8569
GCT     COPPER     michigan      8569

我有一个包含 10 列的表。我想使用 group by 子句按一些 id 对每一行进行分组。我不想在选择查询中使用任何聚合函数。是否有任何替代方法可以使用 group by 子句并避免选择查询中的聚合函数..

提前致谢。

【问题讨论】:

  • 您在搜索DISTINCT吗?如果没有,假设有一些列要GROUP BY,而SELECT 中有一些other 列,那么这些other 列的值如何确定?
  • 简而言之,你不能。现在看来您实际上是在寻找 ORDER BY 而不是 GROUP BY
  • 您需要发布一些具有预期结果的示例数据以帮助您

标签: tsql sql-server-2012


【解决方案1】:

听起来您正在使用GROUP BY 尝试对行进行排序(它只是通过无法保证的巧合副作用来实现)。如果是这种情况,您需要ORDER BY

SELECT 
   Equip.name, equip.type, region.regionname, region.equipfk 
FROM 
   Equip 
INNER JOIN 
   region on Equip.equippk = region.equipfk   
ORDER BY 
   Equip.Name, region.equipfk   

GROUP BYDISTINCT 可能产生看似已排序的输出 - 但这只是 如何实现它们的副作用,并且许多事情(服务器上的负载、服务器配置、热修复、服务包、主要升级)可能会改变返回行的顺序 - 除非您也有 ORDER BY 子句。

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2012-01-26
    • 2016-01-27
    • 1970-01-01
    • 2020-10-25
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多