首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >前几个月建表(累计)

前几个月建表(累计)
EN

Stack Overflow用户
提问于 2013-01-31 15:56:33
回答 2查看 81关注 0票数 3

我对下面的问题有点迷惑,我需要用一个SQL查询来解决这个问题,没有plsql。其想法是构建一个累积列来计算前几个月的所有数据。输入表如下所示

代码语言:javascript
复制
 Month
 1
 2
 3
 ..
 24

我需要构建以下表格:

代码语言:javascript
复制
Month Cum_Month
1     1
2     1
2     2
3     1
3     2
3     3
..
24    1
...
24    23

在SQL Server 2008中提供了所有这些功能,提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 16:12:27

你可以这样做:

代码语言:javascript
复制
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为每个月创建适当的序号。

票数 2
EN

Stack Overflow用户

发布于 2013-01-31 16:17:23

这里有一个不使用任何表的很酷的技巧:

代码语言:javascript
复制
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之间)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14620948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档