create table t1(rowid int identity,
id1 int,ip1 varchar(10),id2 int,ip2 varchar(10),
id3 int,ip3 varchar(10),id4 int,ip4 varchar(10),)
select *,identity(int,1,1) rowid into # from tb
declare @i int,@col varchar(10),@sql nvarchar(4000)
set @i=1
while @i<(select count(1) from tb)
begin
set @col=case @i%4 when 0 then '4' else cast(@i%4 as varchar) end
if @i%4=1
insert t1(id1,ip1) select id,ip from # where rowid=@i
else
begin
set @sql='update t1 set id'+@col+'=b.id,'+'ip'+@col+'=b.ip from t1 a,# b where '
+'b.rowid=@i and a.rowid=(@i-1)/4+1'
exec sp_executesql @sql,N'@i int ',@i
end
set @i=@i+1
end
select * from t1
drop table t1

解决方案 »

  1.   

    create table A
    (
       id int,
       ip varchar(10)
    )insert A select 3,'F'
    insert A select 5,'G'
    insert A select 9,'U'
    insert A select 0,'Y'
    insert A select 4,'K'
    insert A select 11,'OP'
    insert A select 56,'Kl'
    insert A select 98,'KL'
    insert A select 18,'jk'
    select identity(int,1,1) as T_id,* into # from Aselect Z_id,
    max(case when T_id%4=1 then id else 0 end) as ID1,
    max(case when T_id%4=1 then ip else '' end) as ip1,
    max(case when T_id%4=2 then id else 0 end) as ID2,
    max(case when T_id%4=2 then ip else '' end) as ip2,
    max(case when T_id%4=3 then id else 0 end) as ID3,
    max(case when T_id%4=3 then ip else '' end) as ip3,
    max(case when T_id%4=0 then id else 0 end) as ID4,
    max(case when T_id%4=0 then ip else '' end) as ip4
    from
    (select case when T_id%4=0 then T_id/4 else T_id/4+1 end as  Z_id,
    * from #) T
    group by Z_id
      

  2.   

    create table A
    (
       id int,
       ip varchar(10)
    )insert A select 3,'F'
    insert A select 5,'G'
    insert A select 9,'U'
    insert A select 0,'Y'
    insert A select 4,'K'
    insert A select 11,'OP'
    insert A select 56,'Kl'
    insert A select 98,'KL'
    insert A select 18,'jk'
    --不用临时表,那就用表变量吧
    Declare @1 table (num int identity,id int,Ip varchar(10))insert into @1(id,ip)
    select id,ip from aselect a.id,a.ip,b.id,b.ip,c.id,c.ip,d.id,d.ip from
    (Select num,id,ip from @1 where num%4=1)a
    left join @1 b on b.num%4=2 and b.num=a.num+1
    left join @1 c on c.num%4=3 and c.num=b.num+1
    left join @1 d on d.num%4=0 and d.num=c.num+1