滚动平均值(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