请问怎么把只有一列数据的竖表转换成横表?

s_hluo 2006-12-14 01:15:15
比如
1
2
3
4
5

要转换成:
1 2 3 4 5

请问怎么写?
...全文
352 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
s_hluo 2006-12-14
  • 打赏
  • 举报
回复
谢谢各位大侠. :)
smaworm 2006-12-14
  • 打赏
  • 举报
回复
UP
marco08 2006-12-14
  • 打赏
  • 举报
回复
s_hluo(笨笨熊) ( ) 信誉:100 Blog 2006-12-14 14:02:50 得分: 0


marco08(天道酬勤) 和 libin_ftsafe(子陌红尘:当libin告别ftsafe) 都是动态执行sql语句,
如果这个sql语句超过8000个字符怎么办? 麻烦指点, 谢谢.


-----------------
如果sql语句超过8000个字符,則用多個變量保存SQL語句
如exec(@sql1+@sql2+@sql3+...)
marco08 2006-12-14
  • 打赏
  • 举报
回复
s_hluo(笨笨熊) ( ) 信誉:100 Blog 2006-12-14 14:01:12 得分: 0


to: marco08(天道酬勤)
我并不是要把它转换到表里, 而是直接显示的就可以了, 所以应该不受列数的限制.


------------
我的沒有把結果转换到表里, 而是直接显示的
s_hluo 2006-12-14
  • 打赏
  • 举报
回复
marco08(天道酬勤) 和 libin_ftsafe(子陌红尘:当libin告别ftsafe) 都是动态执行sql语句,
如果这个sql语句超过8000个字符怎么办? 麻烦指点, 谢谢.
s_hluo 2006-12-14
  • 打赏
  • 举报
回复
to: marco08(天道酬勤)
我并不是要把它转换到表里, 而是直接显示的就可以了, 所以应该不受列数的限制.
marco08 2006-12-14
  • 打赏
  • 举报
回复
create table T(id int)
insert T select 1
insert T select 2
insert T select 3
insert T select 4
insert T select 5

declare @sql varchar(8000)
set @sql='select '
select @sql=@sql+quotename(id)+'='+rtrim(id)+',' from T
select @sql=left(@sql, len(@sql)-1)
exec(@sql)
--result
1 2 3 4 5
----------- ----------- ----------- ----------- -----------
1 2 3 4 5
marco08 2006-12-14
  • 打赏
  • 举报
回复
SQL SERVER 最多支持1024列
s_hluo 2006-12-14
  • 打赏
  • 举报
回复
to caixia615(┌睜眼為殤.2ǒǒ6.閉眼為塵┐) :

我是想得到:
1 1 1 2 2 3
1 2 3 1 2 1 这样的结果.
s_hluo 2006-12-14
  • 打赏
  • 举报
回复
to: libin_ftsafe(子陌红尘:当libin告别ftsafe)

如果表中的数据量大的话怎么办?
caixia615 2006-12-14
  • 打赏
  • 举报
回复
例子..
a b
1 1
1 2
1 3
2 1
2 2
3 1
--如何转换成如下结果:
a b
1 123
2 12
3 1
create table tb
(
a int,
b int
)
insert into tb(a,b) values(1,1)
insert into tb(a,b) values(1,2)
insert into tb(a,b) values(1,3)
insert into tb(a,b) values(2,1)
insert into tb(a,b) values(2,2)
insert into tb(a,b) values(3,1)
go

create function f_hb(@a int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ' '
select @str = @str + '' + cast(b as varchar) from tb where a = @a
set @str = right(@str , len(@str) - 1)
return(@str)
End
go


select distinct a ,dbo.f_hb(a) as b from tb

drop table tb

--结果
a b
----------- ------
1 123
2 12
3 1
jacobsan 2006-12-14
  • 打赏
  • 举报
回复
select max(case col when 1 then col else null end), max(case col when 2 then col else null end) from table
子陌红尘 2006-12-14
  • 打赏
  • 举报
回复
create table #(id int)
insert into # select 1
insert into # select 2
insert into # select 3
insert into # select 4
insert into # select 5
insert into # select 6
go


declare @sql varchar(2000)
set @sql=''

select @sql=@sql+','''+rtrim(id)+'''' from #

set @sql='select '+stuff(@sql,1,1,'')

exec(@sql)
go


/*
---- ---- ---- ---- ---- ----
1 2 3 4 5 6
*/

drop table #
go
jacobsan 2006-12-14
  • 打赏
  • 举报
回复
用case when

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧