2011-07-18 8 views
1

私はこのような結果セットがあります。T-SQLのデータ変換

 
Value1 Value2 
100  50 
200  30 
-  - 
-  - 

T-SQLでそれを行う方法:

 
ID Value 
1 100 
2 50 
3 200 
4 30 
- - 
- - 

を私はそれが次のように変身したいですか?

+0

IDがあることが保証されて連続した(それらの間のギャップなし)? – Quassnoi

+1

達成しようとしていることと使用しているSQLのバージョンをさらに詳しく記述してください。 –

+0

IDは1から始まり連続しており、ギャップはありません。私はSOL Server 2005を使用しています – kumar

答えて

2

使用この:

select a.Value, b.Value 
from 
(
    select row_number() over(order by ID) [rn], Value 
    from @t 
)a 
left join 
(
    select row_number() over(order by ID) [rn], Value 
    from @t 
)b on b.rn = a.rn + 1 
where a.rn % 2 = 1 

サンプルデータ:

declare @t table (ID int, Value int) 

insert @t values (1,100), (2,50), (3,200), (4,30) 

出力:

Value  Value 
----------- ----------- 
100   50 
200   30 
+0

@kumar、よろしくお願いします! –

+0

おそらくジョインの代わりに左ジョインですか?私の例のように5行を試してみてください。 –

+0

@ t-clausen.dk、確かに、それはタスクに依存するかもしれません...私は私の答えを更新しました:-) –

2
declare @t table (id int, v int) 

insert @t values (1, 10) 
insert @t values (2, 20) 
insert @t values (3, 30) 
insert @t values (4, 40) 
insert @t values (5, 50) 


select t1.v, t2.v 
from @t t1 
left join @t t2 
on t1.id + 1 = t2.id 
where t1.id %2 = 1 
+0

+1、あなたはギャップについて間違っていました:-) –