所以我需要做一个SUMIFS,基本上我需要的是下面以黄色突出显示的列,它基于OrderNo和WorkCntr列对UnitPrice求和:
在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字段。提前致谢
答案 0 :(得分:2)
我认为你正在寻找的函数是一个窗口函数,但我理解CASE WHEN如何看起来是一个不错的选择(当它与SUM结合使用时,它可以工作,但效率不高)。尝试将CASE WHEN语句替换为:
SUM(UnitPrice) OVER (PARTITION BY r.orderNumber,r.WorkCntr) as [Total $ per WC per Order]