begin tran
create table tb(id int,value int)
insert into tb(id,value) values(1,10)
insert into tb(id,value) values(2,110)
insert into tb(id,value) values(3,120)
insert into tb(id,value) values(4,140)
insert into tb(id,value) values(5,160)
insert into tb(id,value) values(6,170)
insert into tb(id,value) values(7,104)
insert into tb(id,value) values(8,124)
insert into tb(id,value) values(9,114)
insert into tb(id,value) values(10,104)
insert into tb(id,value) values(11,123)
insert into tb(id,value) values(12,134)
insert into tb(id,value) values(13,121)
insert into tb(id,value) values(14,100)
declare @sql varchar(2000),@fdname varchar(10)
select @sql=''
declare #aa cursor for select distinct id from tb
open #aa
fetch next from #aa into @fdname
while @@fetch_status=0
begin
select @sql=@sql+',sum(case when id=' +cast(@fdname as varchar)+' then value end) as ['+@fdname+']'
fetch next from #aa into @fdname
end
close #aa
deallocate #aa
select @sql='select '+right(@sql,len(@sql)-1)+' from tb'
print @sql
exec(@sql)
rollback tran
把它改成存储过程,然后在VB中调用这个存储过程就行了.
create procedure aa
as
set nocount on
declare @sql varchar(2000),@fdname varchar(10)
select @sql=''
declare #aa cursor for select distinct cast(id as varchar) from tb
open #aa
fetch next from #aa into @fdname
while @@fetch_status=0
begin
select @sql=@sql+',sum(case when id=' +@fdname+' then value end) as ['+@fdname+']'
fetch next from #aa into @fdname
end
close #aa
deallocate #aa
select @sql='select '+right(@sql,len(@sql)-1)+' from tb'
print @sql
exec(@sql)
set nocount off
begin tran
create table tb(id int,value int)
insert into tb(id,value) values(1,10)
insert into tb(id,value) values(2,110)
insert into tb(id,value) values(3,120)
insert into tb(id,value) values(4,140)
insert into tb(id,value) values(5,160)
insert into tb(id,value) values(6,170)
insert into tb(id,value) values(7,104)
declare @sql varchar(2000),@fdname varchar(10)
select @sql=''
declare #aa cursor for select distinct cast(id as varchar) from tb
open #aa
fetch next from #aa into @fdname
while @@fetch_status=0
begin
select @sql=@sql+',sum(case when id=' +@fdname+' then value end) as ['+@fdname+']'
fetch next from #aa into @fdname
end
close #aa
deallocate #aa
select @sql='select '+right(@sql,len(@sql)-1)+' from tb'
print @sql
exec(@sql)
rollback tran