我对下面的问题有点迷惑,我需要用一个SQL查询来解决这个问题,没有plsql。其想法是构建一个累积列来计算前几个月的所有数据。输入表如下所示
Month
1
2
3
..
24我需要构建以下表格:
Month Cum_Month
1 1
2 1
2 2
3 1
3 2
3 3
..
24 1
...
24 23在SQL Server 2008中提供了所有这些功能,提前感谢
发布于 2013-01-31 16:12:27
你可以这样做:
DECLARE @tbl TABLE ([Month] INT)
INSERT @tbl VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24)
SELECT Month
, ROW_NUMBER() OVER (PARTITION BY Month ORDER BY Month) num
FROM @tbl a
JOIN
(
SELECT *
FROM master..spt_values
WHERE type = 'P'
)
b ON b.number < a.Monthmaster..spt_values用于生成数字,在数字生成后,在@tbl上联接子查询的结果,以获得与month相对应的行数。在此之后,使用ROW_NUMBER为每个月创建适当的序号。
发布于 2013-01-31 16:17:23
这里有一个不使用任何表的很酷的技巧:
SELECT N.Number as Month, N2.Number as Cum_Month
FROM
(SELECT Number FROM master..spt_values WHERE Number BETWEEN 1 AND 24 AND Type = 'P') N
JOIN (SELECT Number FROM master..spt_values WHERE Number BETWEEN 1 AND 24 AND Type = 'P') N2 ON N.Number >= N2.Number
ORDER BY N.Number, N2.Number还有Fiddle。
如果你真的不想要最后24个24 (为什么不),只需将第二个查询更改为1到23之间)。
https://stackoverflow.com/questions/14620948
复制相似问题