【问题标题】:Select max value of a column选择列的最大值
【发布时间】:2021-02-05 16:40:58
【问题描述】:

我有这个查询,它根据一些条件选择一些字段:

 SELECT [Qty].[plant_no]
      ,[Qty].[ord_no]
      ,[Qty].[form_no]
      ,[Qty].[form_var]
      ,[Qty].[form_part]
      ,[Qty].[res_no]
      ,isnull([RFORMPARTS].[cost_center],'_') as [RFORMPARTS_cost_center]
      ,[BARTICLES].[wght_net] AS [Unit_kg]
      ,CASE
        WHEN [Qty].[qty_unit] IN ('KG','KG-C') THEN [Qty].[fb_qty]
        WHEN [Qty].[qty_unit] = 'NR' THEN [Qty].[fb_qty]*[BARTICLES].[wght_net]
        END AS [Qty_KG]
  FROM [dbo].[E00_PRD_003] AS [Qty]
  LEFT JOIN [dbo].[RFORMPARTS] as [RFORMPARTS] ON [RFORMPARTS].[form_no] =  [Qty].[form_no] AND [RFORMPARTS].[form_var] = [Qty].[form_var] and [RFORMPARTS].[form_part] = [qty].form_part
  LEFT JOIN [dbo].[BARTICLES] AS [BARTICLES] ON [BARTICLES].[art_no] = [Qty].[form_no]
  WHERE CONVERT(VARCHAR(10),[Qty].[date_start],112) >= 20180101 AND [Qty].[in_out] = '02' AND LEFT([Qty].[res_no],2) <> 'SL'

我想获得每个 [Qty].[ord_no] 和 [Qty].[form_no] 的最大 Qty.form_part 并保留所有选定的字段。可以和group by一起做吗?如果是,我该怎么做?如果没有,还有其他方法吗?

【问题讨论】:

  • 所以你想要所有的行,但你想将每个ord_noform_no 对的form_part 值替换为max?能否提供预期结果和样本数据?

标签: sql select group-by max where-clause


【解决方案1】:

如果我理解您的要求,一种选择是创建一个子查询,它返回每个 ord_noform_no 对的 max,您可以使用 Group By,但它只会出现在子查询中那么您将在外部查询结果中使用子查询的 max form_part 值,如果您只想要每个 ord_noform_no 对的最大值的行,您可以向 @ 添加一个条件子查询的 987654329@ 添加了 form_part 值的连接,以便它也连接到最大值,这将过滤掉所有具有相同 ord_noform_no 组合且小于最大值的额外行form_part值:

 SELECT [Qty].[plant_no]
      ,[Qty].[ord_no]
      ,[Qty].[form_no]
      ,[Qty].[form_var]
      --,[Qty].[form_part] --Replaced with the subquery max
      ,[maxVals].[form_part] --Max values returned by subquery
      ,[Qty].[res_no]
      ,isnull([RFORMPARTS].[cost_center],'_') as [RFORMPARTS_cost_center]
      ,[BARTICLES].[wght_net] AS [Unit_kg]
      ,CASE
        WHEN [Qty].[qty_unit] IN ('KG','KG-C') THEN [Qty].[fb_qty]
        WHEN [Qty].[qty_unit] = 'NR' THEN [Qty].[fb_qty]*[BARTICLES].[wght_net]
        END AS [Qty_KG]
  FROM [dbo].[E00_PRD_003] AS [Qty]
  INNER JOIN --INNER JOIN the max values on the Qty table
  (
      SELECT [ord_no], [form_no], MAX([form_part]) AS [form_part]
      FROM [dbo].[E00_PRD_003]
      GROUP BY [ord_no], [form_no]
  ) AS maxVals
  ON [maxVals].[ord_no] = [Qty].[ord_no] AND [maxVals].[form_no] = [Qty].[form_no] 
  AND [maxVals].[form_part] = [Qty].[form_part] 
  LEFT JOIN [dbo].[RFORMPARTS] as [RFORMPARTS] ON [RFORMPARTS].[form_no] =  [Qty].[form_no] AND [RFORMPARTS].[form_var] = [Qty].[form_var] and [RFORMPARTS].[form_part] = [qty].form_part
  LEFT JOIN [dbo].[BARTICLES] AS [BARTICLES] ON [BARTICLES].[art_no] = [Qty].[form_no]
  WHERE CONVERT(VARCHAR(10),[Qty].[date_start],112) >= 20180101 AND [Qty].[in_out] = '02' AND LEFT([Qty].[res_no],2) <> 'SL'

【讨论】:

  • 谢谢瑞恩!我想获得的只是每个 ord_no 和 form_no 对的最大值的行
  • @CarlottaFabris 感谢您的澄清。我更新了我的答案,以便子查询连接的所有部分都未注释。这应该给你你所需要的。祝你有美好的一天。
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2018-08-25
  • 2021-10-11
  • 2022-01-14
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多