我们拥有的数据类型是
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实现了这个结果,但只是想知道是否可以通过使用任何其他方法来实现.
你可以用两种方式做到这一点.
使用a 在表格中Recursive CTE
生成数字minimum
和maximum
值
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)