【问题标题】:How to get minimum value of a group?如何获得一个组的最小值?
【发布时间】:2020-01-27 18:05:13
【问题描述】:

我需要获取每个项目(PrjCode)的最小 lineTotal 的报价注释。如何得到它 以下查询我已经尝试过,但没有奏效

  select distinct a.PrjCode,b.LineTotal as 'Neg.rate',(case when min(b.LineTotal) = b.LineTotal then c.Comments end)
from OPRJ a
Left Join PQT1 b on b.Project = a.PrjCode
Inner Join OPQT c on c.DocEntry = b.DocEntry
Group by a.PrjCode,a.PrjName,b.LineTotal,c.Comments
having min(b.LineTotal) = b.LineTotal
Order by a.PrjCode

输出如下

预期输出如下

【问题讨论】:

  • 编辑您的问题并显示示例数据以及所需的结果。某种 db fiddle 也很有帮助。

标签: sql sql-server-2014 minimum


【解决方案1】:

当您使用 group by 时,您不需要使用 distinct,尽管没有可用的示例数据,只是假设下面可能对您有用

select  a.PrjCode,b.LineTotal as 'Neg.rate',
min(c.Comments )
from OPRJ a
Left Join PQT1 b on b.Project = a.PrjCode
Inner Join OPQT c on c.DocEntry = b.DocEntry
Group by a.PrjCode,a.PrjName,b.LineTotal    
Order by a.PrjCode

【讨论】:

    【解决方案2】:

    试试这个查询

         SELECT c.PrjCode, b.LineTotal AS 'Neg.rate', e.Comments FROM ( 
         (SELECT a.PrjCode, MIN(b.LineTotal) AS LineTotal FROM OPRJ a
         LEFT JOIN PQT1 b ON b.Project = a.PrjCode GROUP BY a.PrjCode)c
         INNER JOIN  PQT1 d ON d.Project = c.PrjCode AND d.LineTotal = c.LineTotal
         INNER JOIN  OPQT e ON e.DocEntry = d.DocEntry ORDER BY c.PrjCode)f;
    

    【讨论】:

      【解决方案3】:

      试试这个

      select  a.PrjCode,b.LineTotal as 'Neg.rate', c.Comments
      from OPRJ a
      Left Join PQT1 b on b.Project = a.PrjCode
      Inner Join OPQT c on c.DocEntry = b.DocEntry
      Group by a.PrjCode
      Order by b.LineTotal, a.PrjCode
      

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2015-06-20
        • 2019-03-20
        相关资源
        最近更新 更多