有一个表的数据结构如下:
org item acbl trdt(日期)
机构1 项目1 12.87 20070131
机构1 项目2 1.45 20070131
机构1 项目3 3.45 20070131
机构1 项目1 12.87 20070228
机构1 项目2 1.45 20070228
机构1 项目3 3.45 20070228
机构2 项目1 12.87 20070131
机构2 项目2 1.45 20070131
机构2 项目3 3.45 20070131
机构2 项目1 12.87 20070228
机构2 项目2 1.45 20070228
机构2 项目3 3.45 20070228日期还会增加的
如何得到下表数据
机构 项目 20070131 20070228
机构1 项目1 12.87 12.87
机构1 项目2 1.45 1.45
机构1 项目3 3.45 3.45
机构2 项目1 12.87 12.87
机构2 项目2 1.45 1.45
机构2 项目3 3.45 3.45看了很多行列转换的例子,还是不太懂,特请帮忙,谢谢!
org item acbl trdt(日期)
机构1 项目1 12.87 20070131
机构1 项目2 1.45 20070131
机构1 项目3 3.45 20070131
机构1 项目1 12.87 20070228
机构1 项目2 1.45 20070228
机构1 项目3 3.45 20070228
机构2 项目1 12.87 20070131
机构2 项目2 1.45 20070131
机构2 项目3 3.45 20070131
机构2 项目1 12.87 20070228
机构2 项目2 1.45 20070228
机构2 项目3 3.45 20070228日期还会增加的
如何得到下表数据
机构 项目 20070131 20070228
机构1 项目1 12.87 12.87
机构1 项目2 1.45 1.45
机构1 项目3 3.45 3.45
机构2 项目1 12.87 12.87
机构2 项目2 1.45 1.45
机构2 项目3 3.45 3.45看了很多行列转换的例子,还是不太懂,特请帮忙,谢谢!
insert into #t
select '机构1','项目1',12.87,'20070131'
union all select '机构1','项目2',1.45,'20070131'
union all select '机构1','项目3',3.45,'20070131'
union all select '机构1','项目1',12.87,'20070228'
union all select '机构1','项目2',1.45,'20070228'
union all select '机构1','项目3',3.45,'20070228'
union all select '机构2','项目1',12.87,'20070131'
union all select '机构2','项目2',1.45,'20070131'
union all select '机构2','项目3',3.45,'20070131'
union all select '机构2','项目1',12.87,'20070228'
union all select '机构2','项目2',1.45,'20070228'
union all select '机构2','项目3',3.45,'20070228'declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',max(case when trdt='''+trdt+''' then acbl else 0 end) as '''+trdt+''''
from (select distinct trdt from #t)t
exec('select org,item'+@sql+' from #t group by org,item order by org,item')
/*
org item 20070131 20070228
---------- ---------- ---------------------- ----------------------
机构1 项目1 12.870000 12.870000
机构1 项目2 1.450000 1.450000
机构1 项目3 3.450000 3.450000
机构2 项目1 12.870000 12.870000
机构2 项目2 1.450000 1.450000
机构2 项目3 3.450000 3.450000
*/
drop table tb
gocreate table tb(org varchar(10),item varchar(10),acbl decimal(18,2),trdt varchar(10))
insert into tb(org,item,acbl,trdt) values('机构1','项目1',12.87,'20070131')
insert into tb(org,item,acbl,trdt) values('机构1','项目2',1.45,'20070131')
insert into tb(org,item,acbl,trdt) values('机构1','项目3',3.45,'20070131')
insert into tb(org,item,acbl,trdt) values('机构1','项目1',12.87,'20070228')
insert into tb(org,item,acbl,trdt) values('机构1','项目2',1.45,'20070228')
insert into tb(org,item,acbl,trdt) values('机构1','项目3',3.45,'20070228')
insert into tb(org,item,acbl,trdt) values('机构2','项目1',12.87,'20070131')
insert into tb(org,item,acbl,trdt) values('机构2','项目2',1.45,'20070131')
insert into tb(org,item,acbl,trdt) values('机构2','项目3',3.45,'20070131')
insert into tb(org,item,acbl,trdt) values('机构2','项目1',12.87,'20070228')
insert into tb(org,item,acbl,trdt) values('机构2','项目2',1.45,'20070228')
insert into tb(org,item,acbl,trdt) values('机构2','项目3',3.45,'20070228')
go
declare @sql varchar(8000)
set @sql = 'select org,item'
select @sql = @sql + ' , max(case trdt when ''' + trdt + ''' then acbl end) [' + trdt + ']'
from (select distinct trdt from tb) as a
set @sql = @sql + ' from tb group by org,item order by org , item'
exec(@sql) drop table tb/*
org item 20070131 20070228
---------- ---------- -------------------- --------------------
机构1 项目1 12.87 12.87
机构1 项目2 1.45 1.45
机构1 项目3 3.45 3.45
机构2 项目1 12.87 12.87
机构2 项目2 1.45 1.45
机构2 项目3 3.45 3.45
*/