首页 > 解决方案 > 使用多个表时的 SUM 函数无法正常工作

问题描述

目前我正在使用以下代码:

SELECT psparcomp.ps_comp,
  MPA_Desc.Side,
  MPA_Desc.Color_Code,
  MPA_Desc.Description,
  sum(ISNULL(Forecasts.schd_discr_qty, 0)) AS [Order Amount],
  Product_Structure.pt_promo,
  Forecasts.sod_nbr,
  SUM(PaintSched.qty) AS schedamt
FROM MPA_Desc
  LEFT OUTER JOIN psparcomp ON MPA_Desc.MPA_Number = psparcomp.ps_comp
  LEFT OUTER JOIN Forecasts ON psparcomp.ps_par = Forecasts.sod_part
  LEFT OUTER JOIN Product_Structure
    ON psparcomp.ps_par = Product_Structure.pt_part
  LEFT OUTER JOIN PaintSched ON MPA_Desc.MPAID = PaintSched.MPAID
WHERE Forecasts.schd_discr_qty > 0
GROUP BY psparcomp.ps_comp,
  MPA_Desc.Side,
  MPA_Desc.Color_Code,
  MPA_Desc.Description,
  ISNULL(Forecasts.schd_discr_qty, 0),
  Product_Structure.pt_promo,
  Forecasts.sod_nbr

这些是我的结果:

结果

我需要结果只显示“MPA-0856”和订单金额的总和。它拉多次,因为从预测表中,它拉的零件号是不同的零件号,但这些是用于多个零件号的涂漆零件。我在这里为我们的油漆部门创建了一份报告,他们只需要查看他们需要油漆的总量,而不是按零件编号的数量。我在连接上尝试了几种不同的方法,但似乎没有任何效果。有人可以帮忙吗?

标签: sqlsql-server

解决方案


只是猜测:您的 GROUP BY 子句似乎不应该列出此项目:

ISNULL(Forecasts.schd_discr_qty, 0)

因为那是所得款项的一部分。

此外,从 group by 中删除并选择任何可能在不同行中拆分结果的项目(例如颜色、侧面等)


推荐阅读