问题是我有两个表并且必须计算总收入,我想出了,但无法弄清楚如何应用条件。我在下面的尝试。谢谢!
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;
答案 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;