2015-02-10 72 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