首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

行合并,解决方案

2012-03-08 
行合并,急,急,急~~~~~~有如下几行数据名称1价格1名称2价格2名称3价格3名称4价格4名称5价格5名称6价格6名称

行合并,急,急,急~~~~~~
有如下几行数据
名称1 价格1
名称2 价格2
名称3 价格3
名称4 价格4
名称5 价格5
名称6 价格6
名称7 价格7
名称8 价格8
现在要变成:
名称1 价格1 名称2 价格2 名称3 价格3
名称4 价格4 名称5 价格5 名称6 价格6
名称7 价格7 名称8 价格8

SQL语句该如何写?????????????



[解决办法]

SQL code
declare @t table(id int identity(1,1),col1 nvarchar(5),col2 nvarchar(5))insert @t select '名称1'   ,'价格1' insert @t select '名称2'   ,'价格2' insert @t select '名称3'   ,'价格3' insert @t select '名称4'   ,'价格4' insert @t select '名称5'   ,'价格5' insert @t select '名称6'   ,'价格6' insert @t select '名称7'   ,'价格7' insert @t select '名称8'   ,'价格8'select     a.col1,a.col2,b.col1,b.col2,col1=isnull(c.col1,''),col2=isnull(c.col2,'')from    (select con=(id-1)%3+1,* from @t where id!>3)aleft join    (select con=(id-1)%3+1,* from @t where id between 4 and 6 )b on a.con=b.conleft join     (select con=(id-1)%3+1,* from @t where id >6)c on c.con=a.con--(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)(所影响的行数为 1 行)col1  col2  col1  col2  col1  col2  ----- ----- ----- ----- ----- ----- 名称1   价格1   名称4   价格4   名称7   价格7名称2   价格2   名称5   价格5   名称8   价格8名称3   价格3   名称6   价格6         (所影响的行数为 3 行)
[解决办法]
SQL code
--我这个不需要临时表.create table tb(col1 varchar(10), col2 varchar(10))insert into tb values('名称1','价格1') insert into tb values('名称2','价格2') insert into tb values('名称3','价格3') insert into tb values('名称4','价格4') insert into tb values('名称5','价格5') insert into tb values('名称6','价格6') insert into tb values('名称7','价格7') insert into tb values('名称8','价格8') goselect t1.col1,t1.col2,t2.col1,t2.col2,isnull(t3.col1,'') col1,isnull(t3.col2,'') col2 from(select id = px/3 , col1 , col2 from (SELECT * , PX=(SELECT COUNT(DISTINCT col1) FROM tb WHERE col1 < a.col1) + 1 FROM tb a) t where px % 3 = 1) t1 left join (select id = px/3 , col1 , col2 from (SELECT * , PX=(SELECT COUNT(DISTINCT col1) FROM tb WHERE col1 < a.col1) + 1 FROM tb a) t where px % 3 = 2) t2 on t1.id = t2.idleft join (select id = (px-1)/3 , col1 , col2 from (SELECT * , PX=(SELECT COUNT(DISTINCT col1) FROM tb WHERE col1 < a.col1) + 1 FROM tb a) t where px % 3 = 0) t3 on t1.id = t3.iddrop table tb/*col1       col2       col1       col2       col1       col2       ---------- ---------- ---------- ---------- ---------- ---------- 名称1      价格1      名称2       价格2      名称3      价格3名称4      价格4      名称5       价格5      名称6      价格6名称7      价格7      名称8       价格8                   (所影响的行数为 3 行)*/ 

热点排行