滚动平均值(T-SQL)-基于每天的销售额

滚动平均值(T-SQL)-基于每天的销售额,sql,tsql,sql-server-2012,window-functions,moving-average,Sql,Tsql,Sql Server 2012,Window Functions,Moving Average,我有一个疑问: Select ISNULL(CAST((H.ORDDAT_0) as VARCHAR(11)),'[Totals]') as 'OrderDate', SUM(CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0)) as MONEY)) as 'TotalSalesEntered', SUM(CASE WHEN MONTH(H.SHIDAT_0) = MONTH(GETDATE())

我有一个疑问:

Select 
    ISNULL(CAST((H.ORDDAT_0) as VARCHAR(11)),'[Totals]') as 'OrderDate',
    SUM(CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0)) as MONEY)) as 'TotalSalesEntered',
    SUM(CASE 
           WHEN MONTH(H.SHIDAT_0) = MONTH(GETDATE()) 
              THEN (CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0)) AS MONEY))  
              ELSE 0 
        END) AS 'SalesToShipThisMonth' ,
    SUM(CASE WHEN  MONTH(H.SHIDAT_0) = MONTH(GETDATE()) THEN (CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0))  as MONEY)) else 0 end) / 
      nullif(SUM(CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0)) as MONEY)),0) AS '%SalestoShipThisMonth',
    AVG(SUM(CASE WHEN  MONTH(H.SHIDAT_0) = MONTH(GETDATE()) THEN (CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0))  as MONEY)) else 0 end) / 
      nullif(SUM(CAST(((P.NETPRINOT_0 * Q.QTY_0 * H.CHGRAT_0)) as MONEY)),0)) over (order by ISNULL(CAST((H.ORDDAT_0) as VARCHAR(11)),'[Totals]') ) as 'RollingAvgSalesToShip'
FROM 
    x3v6.CICPROD.SORDER H
LEFT OUTER JOIN 
    x3v6.CICPROD.SORDERQ Q ON H.SOHNUM_0 = Q.SOHNUM_0
LEFT OUTER JOIN 
    x3v6.CICPROD.SORDERP P ON Q.SOHNUM_0 = P.SOHNUM_0 
                           AND Q.SOPLIN_0 = P.SOPLIN_0 
                           AND Q.SOQSEQ_0 = P.SOPSEQ_0
WHERE
    MONTH(H.ORDDAT_0) = MONTH(CAST(GETDATE() as DATE)) 
    AND YEAR(H.ORDDAT_0) = YEAR(GETDATE()) 
    AND H.SOHCAT_0 = 1
GROUP BY
    H.ORDDAT_0 WITH ROLLUP
ORDER BY 
    H.ORDDAT_0 Desc 
返回以下结果集:

OrderDate   TotalSalesEntered     SalesToShipThisMonth  %SalestoShipThisMonth RollingAvgSalesToShip
----------- --------------------- --------------------- --------------------- ---------------------
Jan 24 2017 21421.3756            19792.0256            0.9239                0.5505
Jan 23 2017 143374.856            63420.7183            0.4423                0.5256
Jan 20 2017 166438.6412           58726.3705            0.3528                0.5316
Jan 19 2017 121885.8537           15869.2483            0.1301                0.5453
Jan 18 2017 97076.5584            28272.884             0.2912                0.5799
Jan 17 2017 161553.0361           62826.0752            0.3888                0.6062
Jan 16 2017 151009.424            108613.0565           0.7192                0.6279
Jan 13 2017 189772.7102           81768.742             0.4308                0.6178
Jan 12 2017 259163.0642           131812.8829           0.5086                0.6411
Jan 11 2017 233858.2092           157041.418            0.6715                0.6601
Jan 10 2017 209945.101            76734.7709            0.3654                0.6582
Jan  9 2017 209248.8475           148410.3441           0.7092                0.7168
Jan  6 2017 182705.7833           89876.8759            0.4919                0.7187
Jan  5 2017 143773.0053           99891.9947            0.6947                0.7943
Jan  4 2017 244474.1372           168264.5745           0.6882                0.8441
Jan  3 2017 143069.9108           143069.9108           1.00                  1.00
[Totals]    2678770.5137          1454391.8922          0.5429                0.55
但滚动平均值所做的是将“%salestoshipcolumn”按每一行进行滚动并求平均值(而不是将“已输入的总销售额”和“本月要发货的销售额”的总和按天进行平均)

我想要的结果集是:

Jan  5 2017 143773.0053 99891.9947  0.6947  0.7943  531317.0533 411226.48   0.773975684 (Jan5+Jan4+Jan3)
Jan  4 2017 244474.1372 168264.5745 0.6882  0.8441  387544.048  311334.4853 0.803352514 (Jan4+Jan3)
Jan  3 2017 143069.9108 143069.9108 1          1    143069.9108 143069.9108 1           (Jan3)
__最后4列是要查看的列__

其中,我想要的平均值位于最后一列的第二列(最后一列显示的是求和总数的平均值,而不是求%SalestoShip列的平均值)


这有意义吗?如何使用窗口函数完成此任务?有什么想法吗?谢谢。

sql server版本?对不起,sql-SRV 2012