2011-03-14 11 views
9

テーブルの開始点と終了点に範囲が含まれています。数値の範囲でテンポラリテーブルを作成する

key  startID  endID 
1   500  505 
2   784  788 
3   802  804 

など..

Iは、一時テーブルを作成したい(またはテーブル変数/ CTEなど)であろうこれらの数の各々の行と、彼らはそれらの間にカバー範囲有する - すなわち私は、次の行を持つ表を見たい上記の例を与える:

ID 
500 
501 
502 
503 
504 
505 
784 
785 
786 
787 
788 
802 
803 
804 

は、誰もがこれを達成するために迅速かつ簡単な方法の方向に私を指すことができますか?私は何とか数字のテーブルを使うことを考えましたが、私が見ているテーブルは> 200mの行を持っていて、大きなテーブルはありません!

ご迷惑をおかけして申し訳ありません。前もって感謝します。

答えて

12
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) 
+0

驚異の!ありがとう! – LNote

+0

@L注:ようこそ。それがあなたの望むものなら、受け入れられたものとして答えをチェックしてください。 – Quassnoi

+0

ええ - 私はしましたが、あなたは速すぎて3分待たなければなりませんでした。再度、感謝します。 – LNote

4

MSSQLでは、任意の大きなテーブルからselectを使用することもできます.syscolumnsがその例です。十分な行がない場合は、クロス結合を行うことができます。

SELECT  TOP 10000 
ROW_NUMBER() OVER (ORDER BY c1.id) 
FROM   syscolumns AS c1 
CROSS JOIN syscolumns AS c2 
関連する問題