Sql 生成的数字序列

Sql 生成的数字序列,sql,sql-server,tsql,Sql,Sql Server,Tsql,谁能帮我生成每n个数字重复n次的数字序列。它看起来像这个1,2,2,3,3,3,4,4,4,4。。。不使用临时表和循环就可以得到结果 例如,我可以使用此代码获得从1到1000的简单序列 ;WITH n(n) AS ( SELECT 1 UNION ALL SELECT n+1 FROM n WHERE n < 1000 ) SELECT n FROM n ORDER BY n OPTION (MAXRECURSION 1000); 但如何重新组织代码以获得上述序列

谁能帮我生成每n个数字重复n次的数字序列。它看起来像这个1,2,2,3,3,3,4,4,4,4。。。不使用临时表和循环就可以得到结果

例如,我可以使用此代码获得从1到1000的简单序列

;WITH n(n) AS
(
    SELECT 1
    UNION ALL
    SELECT n+1 FROM n WHERE n < 1000
)
SELECT n FROM n ORDER BY n
OPTION (MAXRECURSION 1000);

但如何重新组织代码以获得上述序列?

对于2048年之前的序列,您可以使用此代码,您可以轻松地修改它以获得更多数字:

DECLARE @N INT;
SET @N = 5;

WITH Numbers AS
(
    SELECT number + 1 number
    FROM master.dbo.spt_values
    WHERE type = 'P'
)
SELECT A.number
FROM Numbers A
CROSS JOIN Numbers B
WHERE A.number >= B.number
AND A.number <= @N
ORDER BY A.number;

对于2048年之前的序列,您可以使用此代码。您可以轻松地对其进行修改以获得更多数字,不过:

DECLARE @N INT;
SET @N = 5;

WITH Numbers AS
(
    SELECT number + 1 number
    FROM master.dbo.spt_values
    WHERE type = 'P'
)
SELECT A.number
FROM Numbers A
CROSS JOIN Numbers B
WHERE A.number >= B.number
AND A.number <= @N
ORDER BY A.number;

这个问题的答案根据版本的不同会有很大的变化-这是2012年还是SQL Server的早期版本?@Hogan获得MSSQL 2008+的结果就可以了。这个问题的答案根据版本的不同会有很大的变化-这是2012年还是SQL Server的早期版本?@Hogan获得MSSQL的结果就可以了2008+@Vsevywniy我编辑了我的答案,其中有一个链接到sqlfiddle,其中有一个演示,还有你看到的结果get@Vsevywniy我用一个链接编辑了我的答案,链接到sqlfiddle,还有它的一个演示和你得到的结果