2017-07-13 1 views
0

J'ai une requête qui résume deux valeurs basées sur un identificateur commun connu sous le nom de workcell. J'essaie de comprendre comment ajouter une colonne qui calcule cette formule en pourcentage: (SumOfAct - SumOfStd)/(SumOfStd)Calculer un champ basé sur 2 colonnes calculées dans SQL

Je pensais qu'une sorte de sous-requête avec des jointures internes fonctionnerait, mais je suis Je ne sais pas comment l'obtenir à la recherche.

Voici mon code qui est tout ce que je veux, sauf pour cette colonne calculée:

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 
+0

Quels [DBMS] (https://fr.wikipedia.org/wiki/DBMS) utilisez-vous? –

Répondre

0

Si je me trompe pas yo peut le faire directement dans la clause 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 
... 

BTW,

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

sera INNER JOIN vraiment comme une colonne de l'expression de la table jointe à gauche est donc interdit d'avoir une valeur NULL. Vous pouvez déplacer le prédicat vers la clause ON pour le conserver à gauche.

+0

Merci! Je ne pensais pas que ce serait aussi simple! – Michael