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
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
(
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
(
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