2016-04-29 14 views
0

で「不足している行を」生成 - 私は次のように3行が生成され考えてみましょう :3行のSQL - この質問は、SQL 2012に関連する選択

Start Position = 10 
End Position = 13 
Value = 100 

Start position = 14 
End Position = 14 
Value = 250 

Start Position = 15 
End Position = 25 
Value = 300 

を... は、私ができる方法はあります出力を書き込むための力SQL:

10 - 100 
11 - 100 
12 - 100 
13 - 100 
14 - 250 
15 - 300 
16 - 300 

などなどなど

は脳を障るされますが、それを行う簡単な方法をうまくカント

どうもありがとう

J

+0

このデータを取得した後、PHPのようにコードで行うのはとても簡単です。 SQLでそれを行うには、おそらくいくつかの論争が必要です。 –

+0

1つの方法は、[数値表](http://www.sqlservercentral.com/blogs/dwainsql/2014/03/27/tally-tables-in-t-sql/)(タリー表とも呼ばれます)を使用することです。これらは、値から行を作成することを含め、あらゆる種類のものにとって非常に便利です。 –

+0

正直言って私には分かりません。あなたの入力と希望する出力を表示できますか? – KumarHarsh

答えて

0

あなたは、再帰CTEまたは数字のテーブルでこれを行うことができます。ギャップが数百〜千以下であると仮定してください:

with n as (
     select row_number() over (order by (select null)) - 1 as n 
     from master.spt_values 
    ) 
select (t.startpos + n.n) as position, value 
from t join 
    n 
    on t.startpos + n.n <= t.endpos; 
+0

ありがとうございました!これは本当に役に立ちました –

0

データベースは数字の表なしで完全ではありません! 1はすべてネット上である作成する方法については、ここでの例です:

Create a numbers table

私は私のデータベース、その呼ばt_numbersで数字テーブルを持って、それが持つ単一の列「n」を持っています1から始まる各番号の行。999,999まで上がりますが、ディスク上のスペースはほとんど占有されません。あなたはそれを持っていたら、このような何かを書くことができます。に参加ヌルがインナーを使用するためにあなたがしたいのギャップをしたくない場合は

が最初

declare @Rows table 
    (
     StartPos int, 
     EndPos int, 
     Value int 
    ) 

    insert into @Rows values (10, 13, 100), (14, 14, 250), (15, 25, 300) 

を使用するには、データのビットを設定します

select n.n, Value 
     from t_numbers n 
      inner join @Rows r on n.n >= StartPos and n.n <= EndPos 

あなたはギャップをしたい場合は、参加左が、where句

でリターンを制限
select n.n, Value 
     from t_numbers n 
      left join @Rows r on n.n >= StartPos and n.n <= EndPos 
     where n <= (select MAX(EndPos) from @Rows) 
+0

ありがとうご親切に、あなたのフィードバックを本当に感謝しています(y)トップノッチの伝説 –

+0

乾杯!あなたが答えとしてマークすることができれば素晴らしいだろう:) – EvalKeneval

0

ありがとうございます!その(ありがとうみんな)最後に、私は数字の表を作成し、それを

をした +は

CROSSはMyNumbers

T.triangle_start_positionとT.triangle_end_position間T.Real_Position

を登録しようと

これは、私が探していた正確な結果セットを返しました