You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL计算售出商品出库量移动平均结果与预期不符求助

问题排查与修正方案

核心错误原因

  • 窗口函数PARTITION BY错误包含inqty字段:出库行的inqty=0,和入库行的非0inqty被划分到不同分区,计算移动平均时无法关联到之前的入库数据
  • 直接对包含0的原始ItemValue计算均值:出库行本身ItemValue=0,如果参与均值计算会导致结果不符合出库成本取值逻辑

修正后的SQL脚本

SELECT * FROM (
    SELECT 
        transactdatee,
        itcode,
        gname,
        inqty,
        ItemValue,
        OutQty,
        -- 移动平均仅针对入库值计算,忽略出库的0值
        AVG(CASE WHEN inqty > 0 THEN ItemValue ELSE NULL END) OVER (
            -- 按商品唯一维度分区,移除多余的inqty字段
            PARTITION BY itcode, gname 
            ORDER BY TransactDatee, inqty ASC 
            ROWS BETWEEN 2 PRECEDING AND CURRENT ROW 
        ) AS MovingAvg,
        ISNULL(
            CASE WHEN OutQty <> 0 THEN 
                AVG(CASE WHEN inqty > 0 THEN ItemValue ELSE NULL END) OVER (
                    PARTITION BY itcode, gname 
                    ORDER BY TransactDatee, inqty ASC 
                    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW 
                ) 
            END,
        0) AS Movingaverageforout 
    FROM mak_stockInHandValue
    WHERE gname LIKE '%bahria town%' AND itcode = 2983
) a
ORDER BY a.transactdatee ASC

逻辑说明

修正后的逻辑先通过CASE WHEN过滤掉出库行的0值ItemValue,AVG函数计算时会自动忽略NULL值,同时移除了partition by中的inqty字段,保证同一个商品的出入库记录在同一个分区内计算,出库时就能取到之前最近3次入库的移动平均成本,和你期望的输出结果一致。

内容的提问来源于stack exchange,提问作者Makhdoom Liaqat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:57:02