累計の計算が役に立つのは、保証のシナリオです。
/* This selects the total sales in the 12 most recent months. */ DEFINE Input AS SELECT DimDate_CalendarYear AS CalYear, DimDate_MonthNumberOfYear AS NumMonth, SUM(FactSales_SalesAmount) AS TotalSales\ GROUP BY CalYear, NumMonth ORDER BY CalYear DESC, NumMonth DESC PAGE(0, 12); RETURN CumulativeSum AS SELECT one.CalYear AS CalYear, one.NumMonth AS NumMonth, SUM(many.TotalSales) AS TotalSales FROM Input one JOIN Input many ON ((one.CalYear > many.CalYear) OR (one.CalYear = many.CalYear AND one.NumMonth >= many.NumMonth) ) GROUP BY CalYear, NumMonth ORDER BY CalYear, NumMonth
この例のoneとmanyは、文の別名であり、その目的は、この多対1自己結合における役割を明確にすることです。結合条件に注目すると、これは、1つの(one)レコードに対して複数のレコードを、結合条件に一致する多数の(many)値に基づいて作成する処理であると考えることができます。