阶梯计费存储过程

在做一个物业管理系统,收费模块中,有些收费根据用量不同决定收费标准。

如以下部分收费:

 

电收费标准:0-260/0.85度元、261-600/每度增加0.05元、601以上每度增加0.3元

计算方法:如用了564度电,则电费=260*0.85+(564-260)*0.9=494.6元。

 

水费收费标准:0-22吨每方3.8元,22-30方4.5元,30方以上5元

计算方法:如用了23吨水,则水费=22*3.8+(23-22)*4.5=88.1元

……

 

涉及两张表:收费项目表、梯度费用表

 

关于怎么计算费用,纠结了好久。。。谷歌、百度良久没找到解决方法,只好自己想办法解决。

于是有了以下代码

ALTER PROCEDURE [dbo].[sp_calc_floor_charge]
    @ChargeItem_Id VARCHAR(36),
    @Count INT
AS
SELECT SUM(d.amount*d.FloorPrice) FROM 
(
SELECT c.FloorPrice,amount=(CASE WHEN c.Num1>0 THEN c.EndNum  WHEN (c.Num1<0 AND c.Num2>0) THEN c.Num2 ELSE  0 END) FROM
(
SELECT  b.[Count],b.[Count]-a.EndNum Num1,b.[Count]-a.StartNum+1 Num2,a.EndNum, a.FloorPrice
  FROM PM_ChargeItem_Floor a,(SELECT @Count [Count]) b 
WHERE a.chargeitem_uid=@ChargeItem_Id
) c
) d

 

功能总算实现了。。做个笔记,备忘。

 

 

posted @ 2013-12-12 20:31  guolf  阅读(375)  评论(0编辑  收藏  举报

个人博客