我有点迷失了以下需要用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中,提前谢谢
答案 0 :(得分:2)
你可以这样做:
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.Month
master..spt_values
用于生成数字,生成数字后,子查询的结果将连接到@tbl
以获取与month
对应的行数。之后ROW_NUMBER
用于为每个月创建适当的序号。
答案 1 :(得分:1)
这是一个非常酷的技巧,不使用任何表格:
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
如果你真的不想要最后24 24(为什么不),只需将第二个查询更改为1到23之间。