首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个联合计算并插入的复杂表!该如何解决

2012-05-27 
一个联合计算并插入的复杂表!原帖如下,有部分答案和演示数据代码。表A的结构如下:客户 类型 金额 还款日期

一个联合计算并插入的复杂表!
原帖如下,有部分答案和演示数据代码。


表A的结构如下:

客户 类型 金额 还款日期 还款
甲 A 20 2012/5/10
甲 B 40 2012/5/10
乙 A 60 2012/5/20
乙 C 70 2012/5/20 70
乙 B 80 2012/5/20 80

SQL条件如下:
1、首先取得系统日期,按照系统日期减去还款日期,大于5天的记录提取出来。
2、对于取出的记录,我们判断该客户是否有还款,那么将还款字段按照客户进行求和,那么甲为0,乙为150
3、对还款为0的客户,我们将按照类型A,B,C的金额求和进行罚款(这里的罚款金额:20+40=60),罚款比率参照,表B,。60*0.05*6天=18元。如果金额小于20,那么就罚款20.


表B
客户 比率
甲 0.05
乙 0.04



4、最终得到一个记录,插入表A,定义类型为D(即罚款类型):
客户 类型 金额 还款日期 还款
甲 D 20 2012-5-24


5、。。。超过5天以后,每一天运算一次。然后累加进去,那么5月25日的罚款金额为:
60*0.05*7=21
5月26日就为:60*0.05*8=28

在58日,就应该更新为:
客户 类型 金额 还款日期 还款
甲 D 28 2012-5-24















SQL code
CREATE TABLE #A(客户 nvarchar(50),类型 nvarchar(50),金额 int,还款日期 datetime,还款 int)CREATE TABLE #B( 客户 NVARCHAR(50), 比率 INT)INSERT INTO #BSELECT '甲', 10 UNIONSELECT '乙', 20INSERT INTO #ASELECT '甲','A', 20, '2012/5/10',NULL UNION ALLSELECT '甲','B', 40, '2012/5/10',NULL UNION ALLSELECT '乙','A', 60, '2012/5/19',NULL UNION ALLSELECT '乙','C', 70 ,'2012/5/20',70 UNION ALLSELECT '乙','B', 80, '2012/5/20',80


[解决办法]
太长,略过,不看。

热点排行