在sql查询中添加每行以前的行

时间:2015-06-30 18:17:14

标签: sql

假设我的表格值如下:

    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循环中完成,但有一个简单的查询吗?

感谢您的帮助。

谢谢, Ĵ

1 个答案:

答案 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]