根据 SQL 中的 2 个计算列计算一个字段

Calculate a field based on 2 calculated colums in SQL

我有一个查询,它根据称为工作单元的公共标识符对几个值求和。我想弄清楚如何添加一个列来计算此公式的百分比:(SumOfAct - SumOfStd) / (SumOfStd)

我在想某种带有内部连接的子查询会起作用,但我不确定如何让它看起来正确。

这是我的代码,它获取了我想要的所有内容,但计算列除外:

SELECT v_MES_OrderIssues.AssignedWorkcell
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Std)) AS SumOfStd
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Act)) AS SumOfAct
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Variance)) AS SumOfVariance

FROM (v_SAP_OrderOperations 
LEFT JOIN v_SAP_Orders ON v_SAP_OrderOperations.Ordr = v_SAP_Orders.Ordr) 
LEFT JOIN v_MES_OrderIssues ON v_SAP_OrderOperations.Ordr = v_MES_OrderIssues.WOrder
WHERE (((v_SAP_Orders.OpenOrder) Like '1')
AND ((v_SAP_Orders.Equipment) Is Not NULL)
AND ((v_SAP_OrderOperations.ACT)>0))
AND ((v_MES_OrderIssues.AssignedWorkcell) Like 'S5H%W')
AND ((v_MES_OrderIssues.DateTimeClosed) Is Null)
OR (((v_SAP_Orders.OpenOrder) Like '1')
AND ((v_SAP_Orders.Equipment) Is Not NULL)
AND ((v_SAP_OrderOperations.OpenOp) Like '0'))
AND ((v_MES_OrderIssues.AssignedWorkcell) Like 'S5H%W')
AND ((v_MES_OrderIssues.DateTimeClosed) Is Null)

GROUP BY v_MES_OrderIssues.AssignedWorkcell

ORDER BY Sum(v_SAP_OrderOperations.Variance) DESC

如果我做对了,你可以直接在 SELECT 子句中完成

SELECT v_MES_OrderIssues.AssignedWorkcell
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Std)) AS SumOfStd
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Act)) AS SumOfAct
 , CONVERT(Decimal(10,2), Sum(v_SAP_OrderOperations.Variance)) AS SumOfVariance
 , CONVERT(Decimal(10,2), (Sum(v_SAP_OrderOperations.Act) - Sum(v_SAP_OrderOperations.Std))/ Sum(v_SAP_OrderOperations.Std)) AS percentage
...

顺便说一句,

LEFT JOIN v_SAP_Orders 
...
WHERE (((v_SAP_Orders.OpenOrder) Like '1')

INNER JOIN 真正作为来自左连接 table 表达式的列,因此禁止具有 NULL 值。您可能希望将谓词移动到 ON 子句以使其保持左连接。