您的位置:首页 > 其它

分段计算像计算个人所得税那样算法的函数

2012-08-16 14:25 148 查看
alter function udf_GetSumWithCoefficient(@input int)

returns int

as

BEGIN

DECLARE @DCName numeric(8,2)

DECLARE @DCCoefficient numeric(8,2)

DECLARE @DCStep numeric(8,2)

DECLARE @Sum numeric(8,2)

SET @Sum = 0.0

DECLARE db_cursor CURSOR FOR

SELECT [next].DCName, ISNULL([next].DCName, 0) - [current].DCName,[next].DCCoefficient

FROM DriveCoefficient AS [current]

inner JOIN DriveCoefficient AS [next] ON [next].DCName = (SELECT MIN(DCName) FROM DriveCoefficient WHERE DCName > [current].DCName)

union

SELECT DCName, DCName, DCCoefficient

FROM DriveCoefficient

where DCName = (select min(DCName) from DriveCoefficient)

order by 1

OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @DCName, @DCStep, @DCCoefficient

WHILE @@FETCH_STATUS = 0

BEGIN

if @DCStep <= @input --步小于输入值

begin

set @Sum = @Sum + @DCStep * @DCCoefficient

set @input = @input - @DCStep

end

else

begin

set @Sum = @Sum + @input * @DCCoefficient

set @input = 0

end

FETCH NEXT FROM db_cursor INTO @DCName, @DCStep, @DCCoefficient

END

if @input > 0

set @Sum = @Sum + @input * @DCCoefficient

CLOSE db_cursor

DEALLOCATE db_cursor

return @Sum

END

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: