根据 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
子句以使其保持左连接。
我有一个查询,它根据称为工作单元的公共标识符对几个值求和。我想弄清楚如何添加一个列来计算此公式的百分比:(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
子句以使其保持左连接。