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

求教,怎么将多列数据平铺进一行

2013-05-02 
求教,如何将多列数据平铺进一行表:列名noabc1a1b1c12a2b2c23a3b3c3...输出格式为:列名:输出内容:a1b1c1a2b

求教,如何将多列数据平铺进一行
表:

列名  no  a   b   c
      1   a1  b1  c1
      2   a2  b2  c2
      3   a3  b3  c3
      ...

输出格式为:

列名:   
输出内容:  a1  b1  c1  a2  b2  c2   a3  b3  c3 ...

先谢谢各位高手了!

[解决办法]


declare @v nvarchar(500)
select @v=''
select @v=@v+' '+a+' '+b+' '+c from tab
select @v

[解决办法]
select a+' '+b+' '+c+' ' from tab for xml path('')

[解决办法]
select ' '+a+' '+b+' '+c from 表 for xml path('')
[解决办法]

create table zy
(no int, a varchar(5), b varchar(5), c varchar(5))

insert into zy
select 1, 'a1', 'b1', 'c1' union all
select 2, 'a2', 'b2', 'c2' union all
select 3, 'a3', 'b3', 'c3'


select * from zy

/*
no          a     b     c
----------- ----- ----- -----
1           a1    b1    c1
2           a2    b2    c2
3           a3    b3    c3

(3 row(s) affected)
*/


declare @tsql varchar(6000)

select @tsql='select '

select @tsql=@tsql+' max(da'+rtrim(no)+') da'+rtrim(no)+','
                  +' max(db'+rtrim(no)+') db'+rtrim(no)+','
                  +' max(dc'+rtrim(no)+') dc'+rtrim(no)+','
 from (select distinct no from zy) z

select @tsql=left(@tsql,len(@tsql)-1)+' from (select no,'

select @tsql=@tsql+' max(case when no='+rtrim(no)+' then a else '''' end) da'+rtrim(no)+','
                  +' max(case when no='+rtrim(no)+' then b else '''' end) db'+rtrim(no)+','
                  +' max(case when no='+rtrim(no)+' then c else '''' end) dc'+rtrim(no)+','
 from (select distinct no from zy) z

select @tsql=left(@tsql,len(@tsql)-1)+' from zy group by no) t'



exec(@tsql)

/*
da1   db1   dc1   da2   db2   dc2   da3   db3   dc3
----- ----- ----- ----- ----- ----- ----- ----- -----
a1    b1    c1    a2    b2    c2    a3    b3    c3

(1 row(s) affected)
*/


[解决办法]


declare @tab table
(
n int,
a nvarchar(50),
b nvarchar(50),
c nvarchar(50)
)

insert into @tab(n,a,b,c)
select 1,'a1','b1','c1' union all
select 2,'a2','b2','c2' union all
select 3,'a3','b3','c3' union all
select 4,'a4','b4','c4' 

declare @v nvarchar(500)
declare @sql nvarchar(500)
declare @i int


select @v=''
select @sql='select '
select @i=97

select @v=@v+a+' '+b+' '+c+' ' from @tab

while(1=1)
begin
select @sql=@sql+''''+substring(@v,1,charindex(' ',@v))+''' as '+char(@i)+','

select @v = substring(@v,charindex(' ',@v)+1,len(@v)-charindex(' ',@v))

if(charindex(' ',@v)=0)
begin
select @sql=@sql+''''+ @v+''' as '+char(@i+1)
break
end
select @i=@i+1
end

exec(@sql)



热点排行