我有一个表,其中包含一个范围的开始和结束编号的行,例如
key startID endID
1 500 505
2 784 788
3 802 804
以此类推..
我想创建一个临时表(或表变量/cte等),其中每个数字和它们之间的范围都有一行-即,在上面的示例中,我希望看到一个包含以下行的表:
ID
500
501
502
503
504
505
784
785
786
787
788
802
803
804
有谁能告诉我实现这一目标的快速而简单的方法吗?我想过使用numbers表,但我正在查看的表有超过200m行,而且我没有那么大的numbers表!
任何帮助都是非常感谢的。提前谢谢。
发布于 2011-03-14 16:02:21
WITH q AS
(
SELECT startId, endId
FROM ranges
UNION ALL
SELECT startId + 1, endId
FROM q
WHERE startId < endId
)
SELECT startId
FROM q
OPTION (MAXRECURSION 0)
发布于 2013-04-23 09:06:27
在MSSQL中,您还可以从任意大表中使用select,syscolumn就是一个例子。如果没有足够的行-您可以执行交叉连接:
SELECT TOP 10000
ROW_NUMBER() OVER (ORDER BY c1.id)
FROM syscolumns AS c1
CROSS JOIN syscolumns AS c2
https://stackoverflow.com/questions/5301142
复制相似问题