2016-04-13 18 views
0

私は12桁の数字と2つの列の範囲に基づいて何千ものフィールドを引き出すことができるSQL Whileループを作成したいと思います。例えば、Whileループ100個の数値

私はテーブル

MasterKeyNumber---BB000Q000000 
StartingNumber BB0000000001 
EndingNumber - BB000Q00000022 

に3列を持っている場合、私は最低と内のすべての数字を引いて、番号を終了しているだろうが表示されますされますwhileループを作成したいですまた、私は唯一の「間」「AND」が、私の場合のようなステートメントを使用して1つまたは2つだけの範囲を引くことができ、例えば

MasterKeyNumber---BB000Q000000 
StartingNumber BB0000000001 
StartingNumber BB0000000002 
StartingNumber BB0000000003 
StartingNumber BB0000000004 
StartingNumber BB0000000005 
StartingNumber BB0000000006 
StartingNumber BB0000000007 
StartingNumber BB0000000008 
StartingNumber BB0000000009 
StartingNumber BB0000000010 
StartingNumber BB0000000011 
StartingNumber BB0000000012 
StartingNumber BB0000000013 
StartingNumber BB0000000014 
StartingNumber BB0000000015 
StartingNumber BB0000000016 
StartingNumber BB0000000017 
StartingNumber BB0000000018 
StartingNumber BB0000000019 
StartingNumber BB0000000020 
StartingNumber BB0000000021 
StartingNumber BB0000000022 

EndingNumber - BB000Q00000022 

をMASTERKEY番号

を表示複数の異なる番号と複数の異なる範囲を示す範囲を持っている私はどのようにそれを行うのですか?例えば

、BB0000000066、BB0000000088に、これだけの範囲を提供しますが、私はBB00000000010にBB0000000004のような複数の範囲を持つことになります異なる番号の数千を持っている時間

Select MasterKey, StartingNumber, EndingNumber, from TabelName 
where StartingNumber Between 'BB0000000001' AND 'BB0000000022' 

でBB0000000045を1つの範囲を引っ張るための私のクエリto BB0000000099

すべての範囲を取得するには、while whileループクエリを使用する必要がありますか?アドバンス

+0

あなたが探している範囲に韻や理由がない場合、複数のSELECT文ではできないループは何をしますか?とにかく「複数の異なる番号と複数の異なる範囲」を入力する必要はありませんか? – WillardSolutions

+0

私はループを編集して、私が持っている他の何千ものプロジェクトにループクエリーを適用できます! – MMuser

答えて

1

おかげであなたはループやその他もろもろの形でSQLクエリを考える場合は、行き止まりの多くで終わるでしょう。代わりに、データとその互いの関係のセットを考える。

はあなたが戻りたい範囲のすべてを取得する方法について考える:

SELECT masterkey, startingnumber, endingnumber FROM tablename; 

は、今、私たちは私たちが照会したいすべての開始と終了の番号を持っています。その範囲に表示される開始番号のすべてを取得したいと思っています。従って:

SELECT 
    tablename.masterkey, 
    tablename.startingnumber, 
    myRanges.startingNumber, 
    myRanges.endingNumber 
FROM 
    (SELECT masterkey, startingnumber, endingnumber FROM tablename) myRanges 
    INNER JOIN tablename ON 
     tablename.startingnumber BETWEEN myRanges.StartingNumber and myranges.EndingNumber 

ここでは、最初のクエリを使用してテーブルを再度照会する開始および終了範囲を設定しました。興味のある startingnumberを返してから、startingnumberを引き寄せたstartingnumberendingnumberが返されます。

+0

助けをどうもありがとう、私は からの回答の後半、次の問題を抱えています(MASTERKEY、startingnumber、テーブル名FROM endingnumberを選択)myRanges はINNERはmyRanges.StartingNumberとmyranges.EndingNumber BETWEEN tablename.startingnumber ONテーブル名を登録しようクエリ内の開始番号と終了番号をプラグインして同じ番号を何度も何度も引っ張り続けていた – MMuser

+0

テーブル内の 'startingnumber'と' endingnumber'から開始番号と終了番号を取得していませんか? 'startnumber'と' endingnumber'から派生したレコードの範囲が必要ですが、開始番号と終了番号によって制限されています。それは最後の要件で、私はあなたのニーズに私のクエリからドットを接続するのに十分な理解はわかりません。 – JNevill

+0

私はこの選択 Tablename.MasterKeyを行う場合を除き、 TabelName.StartingNumber myRanges.StartingNumber、 から myRanges.EndingNumber、 (セレクトMasterKeyKey = 'B00000000020'、StartingNumberは= 'B0000000021'、EndingNumber = 'B00005000530')myRanges INNER JOIN SameTableName ON dbo.SameTableName.StartingNumber 'B00000000020'と 'B000000000530'の間これでレコードごとの範囲の完全なセットが得られました。 – MMuser