假设我在数据库ttbas中有如一个表t1:
name
--------
张三
李四
王五
现在怎样用TSQL使t1每一条记录的name字段值成为另一个新表t2的字段名,从而实现行与列的倒置?
也就是说怎样构成一个这样的t2:
张三 李四 王五
-----------------
. . .
. . .
. . .
并且非常重要的是t1的记录内容是事先不知道的,动态的!!!!!
非常感谢!!
---------------------------------------------------------------
可以这样:
declare @names varchar(4000)
declare @sql varchar(5000)
set @names=''
select @names=@names+','+rtrim(name) +' int' from t1 --这里的int可遗体还成你要的数据类型。
set @sql='create table t2(id int'+@names +')'
exec (@sql)
---------------------------------------------------------------
只要肯找总会有的。
我的一个同学遇到过这样一个问题sql server有这样一个扩展存储过程,
他用了铁棒磨针的劲头把这个东东找到了,可惜我不记得了,去找吧,
找到了也告诉我一声。
---------------------------------------------------------------
//按日期+地区+店名汇总,按日期+地区汇总,再按日期汇总;
select rq,dqdm as dqdm,ddm as ddm,sum(je) as je into #hgjk from hgjk group by rq,dqdm,ddm with rollup
drop table #cszhmc//删除需要待建的表;
//找出关键列
select msdm into #cszhmc from cszhmc group by msdm
//定义循环初始日期
declare @dd datetime
set @dd='2002.06.01'
declare @sql varchar(1000)
//开始创建6月份列
while @dd<'2002.07.01'
begin
declare @ddstr char(2)
set @ddstr=datename(dd,@dd)
//增加新列
set @sql='alter table #cszhmc add['+@ddstr+'] money'
exec (@sql)
//更新新建列
set @sql='update #cszhmc set [' +@ddstr+ ']=b.[' +@ddstr+ '] from #cszhmc a,(select ddm,je as [' +@ddstr+ '] from #hgjk where rq='''+convert(varchar(100),@dd,120)+''') b where a.msdm=b.ddm'
exec (@sql)
select @dd=@dd+1
end
select * from #cszhmc
和你要求有点类似,把它改改就可以了