IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name='proc_NumSum') DROP PROC proc_NumSum GO CREATE PROC proc_NumSum @Values VARCHAR(2000), @ValuesOut VARCHAR(2000) OUTPUT --输出参数 AS DECLARE @OnOff INT, --开关 @ListNum VARCHAR(50), --临时存放切割后的参数 @Value VARCHAR(50), --第二次临时存放再次切割后的参数 @Type VARCHAR(8), --保存数据数据类型 @Num FLOAT, --临时保存要计算的数字 @Denominator FLOAT =0, --要计算的分母 @Molecule FLOAT =0 --要计算的分子 BEGIN IF(OBJECT_ID('#ListValue') IS NOT NULL) BEGIN DROP TABLE #ListValue END CREATE TABLE #ListValue(ltype VARCHAR(8),lvalue VARCHAR(100)) SELECT * INTO #TEMP FROM Split(@Values,';') DECLARE authors_cursor CURSOR FOR SELECT * FROM #TEMP OPEN authors_cursor SELECT @OnOff=SetValue FROM [object] where Name='含量比例开关'; FETCH NEXT FROM authors_cursor INTO @ListNum WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO #ListValue VALUES(SUBSTRING(@ListNum,0,CHARINDEX(':',@ListNum)) ,SUBSTRING(@ListNum,CHARINDEX(':',@ListNum)+1,LEN(@ListNum))) FETCH NEXT FROM authors_cursor INTO @ListNum END CLOSE authors_cursor DEALLOCATE authors_cursor IF @OnOff=1 BEGIN SELECT @Denominator=SUM(CAST(lvalue AS FLOAT)) FROM #ListValue WHERE ltype='1'; --'1'为分母值的类型 END DECLARE @i INT =1 DECLARE List_cursor CURSOR FOR SELECT * FROM #ListValue OPEN List_cursor FETCH NEXT FROM List_cursor INTO @Type,@Num WHILE @@FETCH_STATUS = 0 IF @OnOff =0 BEGIN IF @i=1 BEGIN SET @Denominator=CAST(@Num AS FLOAT) SET @ValuesOut=CAST(@Denominator/@Denominator*100 AS VARCHAR)+';' END ELSE BEGIN SET @ValuesOut+=CAST(CAST(@Num AS FLOAT)/@Denominator*100 AS VARCHAR)+';' END SET @i=@i+1 FETCH NEXT FROM List_cursor INTO @Type,@Num END ELSE IF @OnOff=1 BEGIN SET @ValuesOut+=CAST(CAST(@Num AS FLOAT)/@Denominator*100 AS VARCHAR)+';' FETCH NEXT FROM List_cursor INTO @Type,@Num END CLOSE List_cursor DEALLOCATE List_cursor PRINT (@ValuesOut) END; GO EXEC proc_NumSum '1:1.00;2:2.00;2:3.00;2:4.00;1:5.00;1:6.00;3:7.00;3:8.00;',1
浙公网安备 33010602011771号