在线等,求一个简单的行列转行写法
数据库是SQL 2005
目前的表结构为 name value字段,name为主键
里面的内容为
name value
-----------------
张三 3
李四 2
王五 1
现在需要得到这样的结果
张三 李四 王五
3 2 1
里面的数据量不固顶,请问如何写出?谢谢各位大大指教.
------解决方案--------------------CREATE TABLE test1([name] VARCHAR(10) NOT NULL,[value] INT NOT NULL)
INSERT INTO test1
VALUES ('张三',3),('李四',2),('王五',1)
--静态
select
张三=max(case when [name]='张三' then [value] else 0 END),
李四=max(case when [name]='李四' then [value] else 0 END),
王五=max(case when [name]='王五' then [value] else 0 END)
from test1
--动态:
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([name])+'=max(case when [name]='+quotename([name],'''')+' then [value] else 0 end)'
from test1 group by[name]
SET @s=STUFF(@s,1,1,'')
PRINT @s
exec('select '+@s+' from test1 ')
请参考:
http://bbs.csdn.net/topics/240002706
------解决方案--------------------SELECT * FROM test1
PIVOT (MAX([value]) FOR [name] in(张三,李四,王五))b
------解决方案--------------------
create table sa
(name varchar(10), value int)
insert into sa
select '张三', 3 union all
select '李四', 2 union all
select '王五', 1
declare @tsql varchar(6000)
select @tsql=isnull(@tsql,'')+'['+name+'],'
from sa
select @tsql='select '+left(@tsql,len(@tsql)-1)
+' from sa a '
+' pivot(max(value) for name in('+left(@tsql,len(@tsql)-1)+')) p '
exec(@tsql)
/*
张三 李四 王五
----------- ----------- -----------
3 2 1
(1 row(s) affected)
*/