2015-02-10 46 views
0

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

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

+0

回答这个问题的变化取决于版本很多 - 这是2012或SQL Server的早期版本? – Hogan 2015-02-10 15:20:16

+0

@Hogan这将是很好的结果到MSSQL 2008+ – abilash 2015-02-10 15:22:44

回答

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 ║ 
╚════════╝ 
+0

很酷!!! – abilash 2015-02-10 15:24:41

+0

@Vsevywniy我编辑了我的答案,并带有一个链接到sqlfiddle演示了它,也获得了结果 – Lamak 2015-02-10 15:25:58