日期:2014-05-19  浏览次数:20507 次

怎么样把一列的数据平均成两列
怎么样把一列的数据平均成两列
例如把
序号   车号
1         n1
2         n2
3         n3
4         n4
变成
序号   车号   序号   车号
1         n1       3         n3
2         n2       4         n4



------解决方案--------------------
create table t (id int, name varchar(2))
--drop table t

insert into t
select 1, 'n1 ' union
select 2, 'n2 ' union
select 3, 'n3 ' union
select 4, 'n4 '

select a.id, a.name, b.id, b.name
from (
select (select count(*) from t a where t.id> a.id) cnt,*
from t
where (select count(*) from t a where t.id> a.id) < (select count(*) from t)/2
) a
left join (
select ((select count(*) from t a where t.id> a.id)-(select count(*) from t)/2) cnt,*
from t
where (select count(*) from t a where t.id> a.id) > = (select count(*) from t)/2
) b
on a.cnt=b.cnt
where a.cnt < (select count(*) from t)/2

--------结果----------
id name id name
----------- ---- ----------- ----
1 n1 3 n3
2 n2 4 n4

(所影响的行数为 2 行)



------解决方案--------------------
select * from (select sid=id/cnt,ssid=id mod cnt,id,ch from table) a join
(select sid=id/cnt,ssid=id mod cnt,id,ch from table) b on (b.sid> a.sid and b.ssid=a.ssid)
其中cnt为表中id值的一半

------解决方案--------------------
create table t (id int, name varchar(2))

insert into t
select 1, 'n1 ' union
select 2, 'n2 ' union
select 3, 'n3 ' union
select 4, 'n4 '
GO
Select
Max(Case (id - 1) / 2 When 0 Then id Else Null End) As 序号1,
Max(Case (id - 1) / 2 When 0 Then name Else Null End) As 车号1,
Max(Case (id - 1) / 2 When 1 Then id Else Null End) As 序号2,
Max(Case (id - 1) / 2 When 1 Then name Else Null End) As 车号
From
t
Group By
id % 2
Order By
序号1
GO
Drop Table t
/*
序号1 车号1 序号2 车号2
1 n1 3 n3
2 n2 4 n4
*/