56,940
社区成员




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' )