2011-07-18 46 views
1

我有一個結果集是這樣的:T-SQL數據變換

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

我希望它轉化爲以下幾點:

 
Value1 Value2 
100  50 
200  30 
-  - 
-  - 

如何使用T-SQL辦呢?

+0

是否IDS保證是連續的(沒有他們之間的差距)? – 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,你對差距是正確的:-) –