如何在SQL中复制这个非常具体的SUMIFS示例?

时间:2017-07-14 19:29:18

标签: sql-server tsql

所以我需要做一个SUMIFS,基本上我需要的是下面以黄色突出显示的列,它基于OrderNo和WorkCntr列对UnitPrice求和:

enter image description here

在Excel中,SUMIFS代码就在它旁边。它很容易,不知道如何转换为SQL。我看到CASE语句的工作方式与SUMIFS类似,但我无法弄明白。这是我试过的:

SELECT
  r.OrderNo,
  r.JobNo,
  r.PartNo,
  r.WorkCntr,
  r.ActualPcsGood,
  o.UnitPrice,
CASE
  WHEN r.WorkCntr = 'Cutting' AND r.OrderNo = '10426' THEN SUM(o.UnitPrice)
  ELSE NULL
  END AS [Total $ per WC per Order]
FROM OrderDet o JOIN OrderRouting r ON o.JobNo = r.JobNo
WHERE r.OrderNo = '10426'
GROUP BY  r.OrderNo, r.JobNo, r.PartNo, r.WorkCntr, r.ActualPcsGood, 
o.UnitPrice
ORDER BY 1, 4;

此代码的结果是上表中的前7列。基本上它返回相同的值,而不是SUM的值。理想情况下,我不必在WHERE子句之外指定订单号和工作中心,就像在Excel中一样,只需拖动,公式总是读取该特定行的OrderNo和WorkCntr字段。提前致谢

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找的函数是一个窗口函数,但我理解CASE WHEN如何看起来是一个不错的选择(当它与SUM结合使用时,它可以工作,但效率不高)。尝试将CASE WHEN语句替换为:

SUM(UnitPrice) OVER (PARTITION BY r.orderNumber,r.WorkCntr) as  [Total $ per WC per Order]