Bat*_*mer 1 sql t-sql sql-server
我的数据库中有一个数据表,如下所示:
year month sales mom qoq yoy
----------------
2010 1 80 - - -
2010 2 61 -23.75% - -
2010 3 81 32.79% - -
2010 4 94 16.05% -
2010 5 77 -18.09% -
2010 6 75 -2.60% -
2010 7 58 -22.67% -
2010 8 74 27.59% -
2010 9 98 32.43% -
2010 10 97 -1.02% -
2010 11 94 -3.09% -
2010 12 63 -32.98% -
2011 1 61 -3.17% -23.75%
2011 2 79 29.51% 29.51%
2011 3 84 6.33% 3.70%
2011 4 100 19.05% 6.38%
2011 5 78 -22.00% 1.30%
2011 6 99 26.92% 32.00%
2011 7 78 -21.21% 34.48%
2011 8 63 -19.23% -14.86%
2011 9 66 4.76% -32.65%
2011 10 77 16.67% -20.62%
2011 11 93 20.78% -1.06%
2011 12 94 1.08% 49.21%
Run Code Online (Sandbox Code Playgroud)
我想计算每个月(每行)的月度,季度和年度销售百分比变化,如上面最后3列所示.
如何在一个使用T-SQL的结果集中实现此目的?我正在使用SQL Server 2008 R2.谢谢.
此查询仅适用于MSSQL2012,但它的计划和执行时间要好得多
SELECT
year,
month,
sales,
(sales - LAG(sales, 1) over (ORDER BY year, month)) / LAG(sales, 1) over (ORDER BY year, month)*100 AS mom,
(sales - LAG(sales, 4) over (ORDER BY year, month)) / LAG(sales, 4) over (ORDER BY year, month)*100 AS qoq,
(sales - LAG(sales, 12) over (ORDER BY year, month)) / LAG(sales, 12) over (ORDER BY year, month)*100 AS yoy
FROM @tab
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8955 次 |
| 最近记录: |