Создать временную таблицу с диапазоном чисел - PullRequest
9 голосов
/ 14 марта 2011

У меня есть таблица, в которой есть строки с начальными и конечными номерами диапазона, например

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

МожетКто-нибудь указывает мне быстрый и простой способ добиться этого?Я как-то думал об использовании таблицы чисел, но таблицы, на которые я смотрю, имеют> 200-метровые строки, и у меня нет такой большой таблицы чисел!

Любая помощь очень ценится.Заранее спасибо.

Ответы [ 2 ]

12 голосов
/ 14 марта 2011
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)
5 голосов
/ 23 апреля 2013

В MSSQL вы также можете использовать select из любой произвольной большой таблицы, например, syscolumns.Если строк недостаточно - вы можете сделать перекрестное соединение:

SELECT        TOP 10000
ROW_NUMBER() OVER (ORDER BY c1.id)
FROM          syscolumns AS c1
CROSS JOIN    syscolumns AS c2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...