生成的数字序列

时间:2015-02-10 15:09:27

标签: sql sql-server tsql

任何人都可以帮助我生成数字序列,重复每个 n 数字 n 次。它看起来像这样的1,2,3,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);

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

1 个答案:

答案 0 :(得分:4)

对于到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;

Here is a demo让你尝试。

结果是:

╔════════╗
║ number ║
╠════════╣
║      1 ║
║      2 ║
║      2 ║
║      3 ║
║      3 ║
║      3 ║
║      4 ║
║      4 ║
║      4 ║
║      4 ║
║      5 ║
║      5 ║
║      5 ║
║      5 ║
║      5 ║
╚════════╝