新手问题,请帮忙,谢谢
已知表 Aid 数1 数2 数3 数4 数5 数6 数7 数8 数9 数10 数11 数12 数13 数14 数15 数16 数17............
1 0 1 4 6 8 7 5 6 4 7 3 2 5 2 1 1 2
2 1 2 4 3 2 3 5 6 4 7 3 2 5 2 1 9 23 4 2 3 6 1 2 5 2 4 2 3 2 3 2 3 8 2
.....
想得出以下结果,每行从新排列,每列6个数 第7个数从新排6个数..
id 新1 新2 新3 新4 新5 新6......1 0 5 5
1 6 2
4 4 1
6 7 1
8 3 2
7 2 2 1 5 5
2 6 2
4 4 1
3 7 9
2 3 2
3 23 4 5 3
2 6 2
3 4 3
6 2 8
1 3 2
2 2
已知表 Aid 数1 数2 数3 数4 数5 数6 数7 数8 数9 数10 数11 数12 数13 数14 数15 数16 数17............
1 0 1 4 6 8 7 5 6 4 7 3 2 5 2 1 1 2
2 1 2 4 3 2 3 5 6 4 7 3 2 5 2 1 9 23 4 2 3 6 1 2 5 2 4 2 3 2 3 2 3 8 2
.....
想得出以下结果,每行从新排列,每列6个数 第7个数从新排6个数..
id 新1 新2 新3 新4 新5 新6......1 0 5 5
1 6 2
4 4 1
6 7 1
8 3 2
7 2 2 1 5 5
2 6 2
4 4 1
3 7 9
2 3 2
3 23 4 5 3
2 6 2
3 4 3
6 2 8
1 3 2
2 2
declare @table table (id1 int ,id2 int ,id3 int,
id4 int ,id5 int ,id6 int ,id7 int ,id8 int ,id9 int ,id10 int,
id11 int,id12 int,id13 int,id14 int,id15 int,id16 int,id17 int )
--插入数据
insert into @table
select
0,1,4,6,8,7,5,1,4,7,3,2,5,2,1,1,2
--查看表中数据
select * from @table
--新的表
select id1 as new1,id7 as new2 ,id13 as new3 from @table
union all
select id2,id8,id14 from @table
union all
select id3,id9,id15 from @table
union all
select id4,id10,id16 from @table
union all
select id5,id11,id17 from @table
union all
select id6,id12,null from @table/*结果id1 id2 id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
0 1 4 6 8 7 5 1 4 7 3 2 5 2 1 1 2
new1 new2 new3
----------- ----------- -----------
0 5 5
1 1 2
4 4 1
6 7 1
8 3 2
7 2 NULL*/
create table tb(id int,f1 varchar(2),f2 varchar(2),f3 varchar(2),f4 varchar(2),f5 varchar(2),f6 varchar(2),
f7 varchar(2),f8 varchar(2),f9 varchar(2),f10 varchar(2),f11 varchar(2),f12 varchar(2),f13 varchar(2),f14 varchar(2))
insert tb
SELECT 1, '0', '1', '4', '6', '8', '7', '5', '6', '4', '7', '3', '2', '5', '2' UNION ALL
SELECT 2, '1', '2', '4', '3', '2', '3', '5', '6', '4', '7', '3', '2', '5', '2' UNION ALL
SELECT 3, '4', '2', '3', '6', '1', '2', '5', '2', '4', '2', '3', '2', '3', '2'declare @maxfield int,@field int,@totalfield int
declare @sql varchar(8000)set @maxfield=(select count(*) from syscolumns where id=object_id('tb') and name<>'id' and left(name,1)='f')
set @totalfield=@maxfield+(6-@maxfield%6)
set @field=1
set @sql=' select id 'while @field<=@totalfield
begin
if @field%6=0
begin
if @field<=@maxfield
set @sql=@sql+','+'f'+rtrim(@field)+' from tb union all select id '
else
set @sql=@sql+','+''''' from tb'
end
else
begin
if @field<=@maxfield
set @sql=@sql+','+'f'+rtrim(@field)
else
set @sql=@sql+','+''''''
end
set @field=@field+1
end
--print @sql
exec(@sql)drop table tb
/*
id f1 f2 f3 f4 f5 f6
----------- ---- ---- ---- ---- ---- ----
1 0 1 4 6 8 7
2 1 2 4 3 2 3
3 4 2 3 6 1 2
1 5 6 4 7 3 2
2 5 6 4 7 3 2
3 5 2 4 2 3 2
1 5 2
2 5 2
3 3 2
*/