根据SQL表中两列中的值生成数字列表

kam*_*eet 1 sql sql-server

我们拥有的数据类型是

From    To
1       5
6       10
Run Code Online (Sandbox Code Playgroud)

现在,结果应该像 -

Series
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

我已经使用Cursor实现了这个结果,但只是想知道是否可以通过使用任何其他方法来实现.

Pரத*_*ீப் 7

你可以用两种方式做到这一点.

使用a 在表格中Recursive CTE生成数字minimummaximum

CREATE TABLE #test([From] INT,[To]   INT)

INSERT #test
VALUES (1,5),(6,10) 

DECLARE @max INT

SELECT @max = Max([To])
FROM   #test;

WITH cte
     AS (SELECT Min([From]) Series
         FROM   #test
         UNION ALL
         SELECT Series + 1
         FROM   cte
         WHERE  Series < @max)
SELECT Series
FROM   cte a
       JOIN #test b
         ON a.Series BETWEEN b.[From] AND b.[To] 
Run Code Online (Sandbox Code Playgroud)

或者Master..spt_values用来获取数字

SELECT number As Series
FROM   master..spt_values a
       JOIN #test b
         ON a.number BETWEEN b.[From] AND b.[To]
WHERE  type = 'p' 
Run Code Online (Sandbox Code Playgroud)

输出:

+------+
|Series|
+------+
|1     |
|2     |
|3     |
|4     |
|5     |
|6     |
|7     |
|8     |
|9     |
|10    |
+------+
Run Code Online (Sandbox Code Playgroud)