新手问题,请帮忙,谢谢
已知表 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
    

解决方案 »

  1.   

    --定义表
    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*/
      

  2.   


    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   
    */