案例:
原表有两列,分别为月份、月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和
sql 测试数据准备:
DECLARE
@``Temp
Table
(
monthNo`` ``INT``, ``--- 月份
``MoneyData ``Float
--- 金额
)
insert
INTO
@``TEMP
SELECT
1,100 ``UNION
ALL
SELECT
2,200 ``UNION
ALL
SELECT
3,300 ``UNION
ALL
SELECT
4,400 ``UNION
ALL
SELECT
5,500 ``UNION
ALL
SELECT
6,600 ``UNION
ALL
SELECT
7,600
SELECT
monthNo, MoneyData, SUM``(MoneyData) OVER( ) ``AS
'总销售额'``,
SUM``(MoneyData) OVER( PARTITION ``BY
ID ) ``AS
'当月销售额'``,
SUM``(MoneyData) OVER(``ORDER
BY
ID ``ASC``) ``AS
'截止当月累计销售额'
FROM
@``Temp
报错信息如下:
原因:
SUM**(MoneyData) OVER (``ORDER
BY
ID ``ASC``) 必须在sqlserver 2012版及以上执行
**
版本不满足的时候只能更换其他方式完成查询,如:
SELECT
A.monthNo, SUM``(B.MoneyData) ``FROM
@``Temp
A ``INNER
JOIN
@``Temp
B
ON
A.monthNo>=B.monthNo GROUP
BY
A.ID
------ 重点在于 ON 条件,通过自连接 A.monthNo >= B.monthNo ,可获取所需数据,再通过
GROUP
BY
、``SUM
即可统计求和