日期:2014-05-16  浏览次数:20338 次

[行转列] 一张表

用户表 用户数不固定
ID                  Name
1                   lily
2             lucy
3                   jim
...
有多少个用户就有多少列,如下

列名     用户1      用户2       用户3
ID          1                2              3
Name    lily           lucy          jim

------解决方案--------------------
就是拼接sql,拼接成行列转换的语句。

--> 测试数据: [ta]
if object_id('[ta]') is not null 
drop table [ta]
create table [ta] ([ID] int,[Name] varchar(4))
insert into [ta]
select 1,'lily' union all
select 2,'lucy' union all
select 3,'jim'

declare @s varchar(8000)
set @s='select 列名=''ID'''
select @s=@s+',max(case when id='+cast(ID as varchar(5))+' then cast(id as varchar(10)) else null end)'
from ta
set @s=@s+'from ta union '

set @s=@s+'select 列名=''Name'''
select @s=@s+',max(case when id='+cast(ID as varchar(5))+' then name else null end)'
from ta

set @s=@s+'from ta '

exec(@s)

ID 1 2 3
Name lily lucy jim

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

看不太懂啊,大哥,我这用户都是唯一的

你的意思可以理解为有多少个用户表中就有多少行数据吗?

额,表中用户都是唯一的,只是要把它列着来放,  又多了一个用户 就是下面这样了

用户表 用户数不固定
ID                  Name
1                   lily
2                lucy
3                   jim
4                  himi
...
有多少个用户就有多少列,如下
 
列名     用户1      用户2       用户3        用户4
ID          1                2              3                4
Name    lily