|
最初由 cowherd 发布
[B]做好!
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'translate_cross'
AND type = 'P')
DROP PROCEDURE translate_cross
GO
create procedure DBO.translate_cross
as
DECLARE @subject varchar(50)
DECLARE aa CURSOR FOR SELECT distinct subject FROM test order by subject
declare @selstr varchar(200)
set @selstr=''
create table #temp
(
rowname varchar(50)
)
OPEN aa
while(1=1)
begin
FETCH NEXT FROM aa INTO @subject
if @@FETCH_STATUS <> 0 break
set @selstr=@selstr+'sum(isnull('+@subject+',0)) as '+@subject+','
execute ('ALTER TABLE #temp ADD '+ @subject + ' decimal(9,2) default 0')
execute ('insert into #temp(rowname,'+@subject+') select username,result from test where subject='''+@subject+'''')
end
set @selstr=substring(@selstr,1,len(@selstr)-1)
exec ('select rowname ,' +@selstr +' from #temp group by rowname ')
close aa
DEALLOCATE aa
drop table #temp
结果:
--------------------------------------
rowname 化学 物理
李四 88.00 98.00
王一 80.00 90.00
张三 78.00 89.00
赵六 98.00 73.00 [/B]
版主,这一句:
set @selstr=@selstr+'sum(isnull('+@subject+',0)) as '+@subject+','
好像没有什么用 |
|