2017-07-14 7 views
0

だから私はそれがあるOrderNoとWorkCntr列に基づいて単価を合計の下に基本的に私は必要なものの列が黄色で強調表示され、SUMIFSを実行する必要があります。この非常に特殊なSUMIFSの例をSQLで複製する方法は?

enter image description here

SUMIFSコードは、その隣の権利でありますExcelで。私はどのようにしてSQLに変換できるかわかりません。私はCASEステートメントがSUMIFSのように機能するのを見ましたが、私はそれを理解することができませんでした。ここに私が試したものです:

SELECT 
    r.OrderNo, 
    r.JobNo, 
    r.PartNo, 
    r.WorkCntr, 
    r.ActualPcsGood, 
    o.UnitPrice, 
CASE 
    WHEN r.WorkCntr = 'Cutting' AND r.OrderNo = '10426' THEN SUM(o.UnitPrice) 
    ELSE NULL 
    END AS [Total $ per WC per Order] 
FROM OrderDet o JOIN OrderRouting r ON o.JobNo = r.JobNo 
WHERE r.OrderNo = '10426' 
GROUP BY r.OrderNo, r.JobNo, r.PartNo, r.WorkCntr, r.ActualPcsGood, 
o.UnitPrice 
ORDER BY 1, 4; 

このコードの結果は、上記の私のテーブルの最初の7列です。基本的には、同じ値を返しますが、SUMの値は返しません。理想的には、ExcelのようにWHERE句の外にある注文番号と作業区を指定する必要はありません。ドラッグするだけで、数式は常にその特定の行のOrderNoとWorkCntrフィールドを読み取ります。

+0

カラムの名前がわかると、Excelの式がわかりませんので、画像が表示されない場合があります。 –

+0

OrderNoはセルA1にあり、それを含めるのを忘れています。列FはUnitPrice、列DはWorkCntr、列AはOrderNoです –

答えて

2

あなたが探している機能はウィンドウ機能ですが、どのようにCASE WHENが良い選択のように思えるかを理解しています(SUMと組み合わせても効率的ではありません)。

SUM(UnitPrice) OVER (PARTITION BY r.orderNumber,r.WorkCntr) as [Total $ per WC per Order] 
+0

私の人、それは素晴らしい、ありがとう –

関連する問題