在以前写过的项目中SQL中经常遇到行变列的处理
大多使用的方法是先捞出数据在进行循环得到结果
刚刚发现一个好方法,可以直接用SQL语句执行达到这个效果
不用进行循环。
--测试数据
create table tb1(tid int,tvalue varchar(20))
insert tb1 select 1,'2004Q1' union all select 1,'2004Q2' union all select 1,'2004Q3'
union all select 1,'2004Q4' union all select 1,'2005Q1' union all select 2,'2006Q3'
union all select 2,'2006Q4' union all select 3,'2008Q2' union all select 3,'2008Q3'
--生成结果
declare @s varchar(100) set @s=''
select @s=@s+',['+tvalue+']=''''' from tb1 where tid=1
exec('select distinct tid'+@s+' from tb1 where tid=1')
drop table tb1
insert tb1 select 1,'2004Q1' union all select 1,'2004Q2' union all select 1,'2004Q3'
union all select 1,'2004Q4' union all select 1,'2005Q1' union all select 2,'2006Q3'
union all select 2,'2006Q4' union all select 3,'2008Q2' union all select 3,'2008Q3'
--生成结果
declare @s varchar(100) set @s=''
select @s=@s+',['+tvalue+']=''''' from tb1 where tid=1
exec('select distinct tid'+@s+' from tb1 where tid=1')
drop table tb1