【问题标题】:SQL Server : when aggregating, select a single row's value for a specific columnSQL Server:聚合时,为特定列选择单行的值
【发布时间】: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?

标签: sql sql-server sql-server-2008 aggregate aggregate-functions


【解决方案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 时,我丢失了结果,但是当我只放置主查询时,它工作得很好。谢谢你费迪南德!
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2018-05-12
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多