2016-10-13 4 views
0

誰でも以下の理由でコンパイルできないと教えてもらえますか?SQL SUMを超えて区切りを計算するグループの%を計算する

'M3'マークされたトランザクションがバッチ全体の何%であるかを計算しようとしています。

バッチが1つだけあれば簡単だと思いますが、複数のバッチがあることもあります。

全体のコードは以下の通りです:

SELECT 
    [Batch], 
    [DocNum], 
    [Date], 
    [Time], 
    [Location], 
    [ItemCode], 
    [Brand], 
    [Quantity], 
    CASE 
     WHEN [Variance] IS NULL 
      THEN '' 
     ELSE [Variance] 
    END AS [Variance], 
    CASE 
     WHEN [Comments] IS NULL 
      THEN '' 
     ELSE [Comments] 
    END AS [Comments], 
    CASE 
     WHEN [Variance] = 'M3' 
      THEN(
       (
       (SELECT 
        ABS([Quantity]) 
        FROM #BatchReport 
        WHERE [Variance] = 'M3') 
       /
       (SELECT 
        SUM([Quantity]) 
        FROM #BatchReport 
        WHERE [Quantity] > 0) 
       ) * 100) OVER (PARTITION BY [Batch]) 
     ELSE '0' 
    END AS [Pct Loss],       
    SUM([Quantity]) OVER (PARTITION BY [Batch]) AS [Difference], 
    ((SUM([Quantity]) - MAX([Quantity])) * 100)/MAX([Quantity]) OVER (PARTITION BY [Batch]) AS [Pct Difference] 


FROM #BatchReport 
WHERE [DocNum] IS NOT NULL 
GROUP BY [Batch], [DocNum], [Date], [Time], [Variance], [Brand], [Comments], [Quantity], [Location], [ItemCode] 
ORDER BY [Batch], [Date], [Time] 

エラーテキスト:私はしようとしているもののような何かの

CASE 
     WHEN [Variance] = 'M3' 
      THEN(
       (
       (SELECT 
        ABS([Quantity]) 
        FROM #BatchReport 
        WHERE [Variance] = 'M3') 
       /
       (SELECT 
        SUM([Quantity]) 
        FROM #BatchReport 
        WHERE [Quantity] > 0) 
       ) * 100) OVER (PARTITION BY [Batch]) 
     ELSE '0' 
    END AS [Pct Loss] 

サンプル:私はこの部分を削除した場合Incorrect syntax near the keyword 'OVER'.

エラーが消えます取得: enter image description here

ありがとう!

+1

よくお答えするために、エラーメッセージを投稿することができます – Lamak

+0

申し訳ありませんが、私は質問 – coblenski

答えて

2

あなたの表現論理は基本的に理解できません。私はあなたが "M3"の値と全体的な値の間の何らかの種類の比を求めていると思っています。私の最高の推測では、されています。しかし、あなたのGROUP BYはあなたのクエリはあなたが欲しいものをやった場合、私は驚くだろうことを、非常に複雑である

(100.0 * SUM(CASE WHEN [Variance] = 'M3' THEN ABS([Quantity]) END)/
SUM(CASE WHEN Quantity > 0 THEN Quantity END) OVER (PARTITION BY Batch) 
) as [Pct Loss] 

。私はあなたがサンプルデータと希望の結果で別の質問を投稿するべきだと思います。

+0

を編集しました。これは正確な結果を提供します。ありがとうゴードン – coblenski

関連する問題