日期:2014-05-18  浏览次数:20587 次

行合并,急,急,急~~~~~~
有如下几行数据
名称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)a
left join
    (select con=(id-1)%3+1,* from @t where id between 4 and 6 )b on a.con=b.con
left 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') 
go

select 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.id
left 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.id
drop 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 行)
*/