SQL Server:聚合时,为特定列选择单行的值

Posted

技术标签:

【中文标题】SQL Server:聚合时,为特定列选择单行的值【英文标题】:SQL Server : when aggregating, select a single row's value for a specific column 【发布时间】:2018-02-08 18:21:20 【问题描述】:

我的表中有三列,Contract_numberRevenueCust_name。我想SUM(Revenue) 同时按Contract_number 分组以获得该合同的总收入。在此旁边,我想显示Cust_name 以显示该合同下的客户。

问题是任何给定合约下都有多个Cust_name 值。合同下的Cust_name 值都非常相似,我不在乎使用哪一个,我只想显示其中一个。

如果我使用MIN(Cust_name) 之类的东西,我会丢失数据,如果我使用GROUP BY Cust_name,那么这些值会被分成多行。

有没有办法为每个结果添加一个 Cust_name 值,同时保持 Contract_numberRevenue 聚合函数相同?

【问题讨论】:

使用 MAX(Cust_Name) 更像是三列而不是行 我认为您最好规范化您的表,为什么单个 Contract_Number 有很多类似的 Cust_Name? 【参考方案1】:

将 MIN(Cust_Name) 或 MAX(Cust_Name) 与 SUM(Revenue) 一起使用,然后按 Contract_number 分组

SELECT Contract_number,
       SUM(Revenue),
       MIN(Cust_Name) -- or MAX(Cust_Name)
  FROM table
 GROUP BY Contract_number

【讨论】:

谢谢,这行得通。我的查询实际上也包含一个子查询。当我在子查询中使用 MIN 时,我丢失了结果,但是当我只放置主查询时,它工作得很好。谢谢你费迪南德!

以上是关于SQL Server:聚合时,为特定列选择单行的值的主要内容,如果未能解决你的问题,请参考以下文章

在clickhouse中与max()聚合时如何连续选择相应的值?

Hive 在使用 case 语句和聚合时按列分组出错

SQL (Hive):在使用 GROUP BY 进行聚合时使用窗口函数

在 Spark 数据框中聚合时访问窗口外的行

SQL Server 触发器插入/更新特定列

如何从sql server中的表中查询json数组类型列的值?