繁体   English   中英

SQL SUM OVER PARTITION BY计算组的百分比

[英]SQL SUM OVER PARTITION BY Calculate % of group

谁能告诉我以下内容为何无法编译?

我正在尝试计算标记为'M3'的交易占整个批次的百分比。

我认为,如果只有一批,那会很容易,但是有时会有很多。

整个代码如下:

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]

错误文本: Incorrect syntax near the keyword 'OVER'.

如果我删除此部分,该错误将消失:

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]

我想要得到的东西的样本: 在此处输入图片说明

谢谢!

您的表达逻辑基本上是难以理解的。 我猜您想在“ M3”值和总体值之间形成某种比例。 我最好的猜测是:

(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]

但是,您的GROUP BY非常复杂,如果您的查询满足您的要求,我会感到惊讶。 我认为您应该发布另一个示例数据和所需结果的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM