如何在SQL中进行条件乘法

时间:2016-10-25 02:27:02

标签: sql sql-server sql-server-2012

问题是我有两个表并且必须计算总收入,我想出了,但无法弄清楚如何应用条件。我在下面的尝试。谢谢!

    SELECT 
           (((SUM(i.ItemCost)) + ((SUM(i.ItemCost)) * j.MarginPercentage)) WHERE j.WorkFlowsStatus = 'Closed')
 FROM Jobs AS j
INNER JOIN Items AS i
        ON j.JobNumber = i.JobNumber
INNER JOIN Customers as c
        ON j.CustomerID = c.CustomerID
     WHERE c.CustomerID = '1235735'
  GROUP BY c.CustomerName;

2 个答案:

答案 0 :(得分:1)

我喜欢先进行计算,然后对值进行求和。没有总和的查询会为您提供每行的详细信息,您可以通过取出分组来查看为每行添加的值的详细信息。

SELECT
    SUM(CASE
            WHEN j.WorkFlowsStatus = 'Closed' THEN i.ItemCost * j.MarginPercentage + i.ItemCost
            ELSE i.ItemCost
        END)
FROM Jobs AS j
    INNER JOIN Items AS i ON j.JobNumber = i.JobNumber
    INNER JOIN Customers as c ON j.CustomerID = c.CustomerID
WHERE c.CustomerID = '1235735'

如果您认为某个值是错误的,只需取出SUM()并离开CASE并添加' *'你可以看到所有细节记录并弄清楚出了什么问题。

当只对所有条目进行总结时,您不需要分组。如果您确实使用分组依据,则任何不在聚合函数中的字段都必须位于分组依据列表中。由于您正在查询特定的CustomerID,因此您知道应该获得什么。如果您没有这样做,按客户名称分组会有风险,请考虑如果两个客户行最终具有相同名称会发生​​什么。

答案 1 :(得分:0)

我怀疑你想要这样的东西:

SELECT (SUM(i.ItemCost) +
        SUM(i.ItemCost * (CASE WHEN j.WorkFlowsStatus = 'Closed' THEN j.MarginPercentage ELSE 0 END))
       )
FROM Jobs j INNER JOIN
     Items i
     ON j.JobNumber = i.JobNumber INNER JOIN
     Customers as c
     ON j.CustomerID = c.CustomerID
WHERE c.CustomerID = '1235735'
GROUP BY c.CustomerName;