假设我的表格值如下:
Date sales
===== =====
Jan 100
Feb 150
Mar 500
等等
如何使用以下结果查询此表:
Date Sales Total
==== ===== ======
Jan 100 100
Feb 150 250 (Jan + Feb)
Mar 500 750 (Jan + Feb + mar)
我知道它可以在SP循环中完成,但有一个简单的查询吗?
感谢您的帮助。
谢谢, Ĵ
答案 0 :(得分:0)
窗口SUM应该适用于多个DBMS。下面是一个SQL Server示例(请告诉我们您正在使用哪一个):
DECLARE @T TABLE ([Date] DATE, [Sales] INT)
INSERT @T VALUES ('1/1/2015', 100), ('2/1/2015', 150), ('3/1/2015', 500)
SELECT
[Date],
[Sales],
SUM([Sales]) OVER (ORDER BY [Date]) AS [Total]
FROM @T
ORDER BY
[Date]
这会生成以下输出:
Date Sales Total
---------- ----------- -----------
2015-01-01 100 100
2015-02-01 150 250
2015-03-01 500 750
由于SQL Server 2008不支持窗口聚合中的ORDER BY(仅限2012年),因此这是一种做同样事情的方法。它的效率非常低 - 这不是一种非常有效的方法,否则我很遗憾地看到了它。
;WITH CTE AS (
SELECT
ROW_NUMBER() OVER (ORDER BY [Date]) AS RowId,
[Date],
[Sales]
FROM @T
)
SELECT
A.[Date],
A.[Sales],
SUM(B.[Sales]) AS [Total]
FROM CTE A
INNER JOIN CTE B
ON B.RowId <= A.RowId
GROUP BY
A.[Date],
A.[Sales]
ORDER BY
A.[Date]