create procedure st_CrossTableByRingSame
@Row varchar(50),
@Col Varchar(50),
@OrderBy varchar(50), /*用于列排序*/
@Sum Varchar(100),
@SQL_Condition Varchar(8000)
with ENCRYPTION
as
declare @Productno varchar(100)
--declare @qty float
declare @qty decimal(18,2)
declare @s varchar(2000)
declare @s_sum varchar(200)
declare @i int
declare @SQL1 varchar(5000)
declare @SQL2 varchar(5000)
declare @SQL3 varchar(5000) set @SQL1='select '+@row+ ' as srow,'+@col+' as scol ,'+'SUM('+@sum+') AS Qty ,'+@OrderBy+' as serial '+ @SQL_Condition
select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
into #tmp
from tbDivision
where 0=1
-- if @OrderBy <>''
set @sql3=' insert into #tmp select distinct scol,serial from ('+@SQL1+' ) as pp order by Serial'
-- else
-- set @sql3=' insert into #tmp select distinct scol from ('+@SQL1+' ) as pp' print @sql3
exec (@sql3)
--print '@sql3ok' set @i=0
set @s_sum=''
DECLARE MyCursor CURSOR FOR
select scol from #tmp
OPEN MyCursor
FETCH NEXT FROM MyCursor
INTO @Productno WHILE @@FETCH_STATUS = 0
BEGIN
set @i=@i+1
if @i=1
begin
-- set @s=' sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+convert(varchar(2),@i)
set @s=' sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+@productno
set @s_sum='P1.Q'+@productno
end
else
begin
set @s=@s+' ,sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+@productno
set @s_sum=@s_sum+'+P1.Q'+@productno
end
FETCH NEXT FROM MyCursor INTO @Productno
END
CLOSE MyCursor
DEALLOCATE MyCursor --print 'OK'
set @SQL2=(' SELECT P1.*, '+@s_sum+' AS YearTotal'+
' into #tempsum FROM (SELECT P.srow,'+@s+
' FROM ('+ @SQL1+') AS P'+
' GROUP BY P.srow) AS P1 order by p1.srow ') --print @SQL2 exec (@SQL2 +
' select * from #tempsum'+
-- ' select convert(varchar(5),DL.DayTimeValue,108)as CollectionTime,B.* from tbDayMinuteList DL left join #tempsum b on b.SRow=convert(varchar(5),DL.DayTimeValue,108) order by DL.DayTimeValue '+
' drop table #tempsum' )
如果自己改的代码仍有问题,则把你的代码和系统提示的错误信息一同贴出,然后大家可以帮你分析学习。
这个存储过程已经改了大部分,不过中间有一段 select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
into #tmp
from tbDivision
where 0=1 ,这个怎么改??
CREATE TEMPORARY TABLE temp (scol varchar(200),serial varchar(100));