这个插入超级有难度,已经有朋友解决一部分了。
这个帖子已经解决一部分,大家可以参考。
http://topic.csdn.net/u/20120524/10/62e999b4-9e10-43cc-a979-af44acf46cf9.html
新的功能===========
表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,如果金额小于2,那么就罚款5.
表B
客户 比率
甲 0.1
乙 0.2
4、最终得到一个记录,插入表A,定义类型为D(即罚款类型):
客户 类型 金额 还款日期 还款
甲 D 6 2012-5-24
5、每天要对这个记录进行检查,如果sum(a,b,c)为0,那么按照3更新一次4插入的记录!
[解决办法]
如果sum(a,b,c)为0 指的是sum什么
[解决办法]
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--1、首先取得系统日期,按照系统日期减去还款日期,大于5天的记录提取出来--SELECT * FROM #A WHERE DATEDIFF(day,还款日期,GETDATE())>5--2、对于取出的记录,我们判断该客户是否有还款,那么将还款字段按照客户进行求和,那么甲为0,乙为150--SELECT 客户,SUM(ISNULL(还款,0))还款 FROM #A GROUP BY 客户--3、对还款为0的客户,我们将按照类型A的金额进行罚款,罚款比率参照。表B,如果金额小于2,那么就罚款5INSERT INTO #ASELECT a.客户,'D',CASE WHEN 金额*比率/100<=2 THEN 5 ELSE 金额*比率/100 END 金额,GETDATE() 还款日期,NULL 还款 FROM (SELECT 客户,SUM(ISNULL(金额,0))金额,SUM(ISNULL(还款,0))还款 FROM #A WHERE DATEDIFF(day,还款日期,GETDATE())>5 AND 类型 IN ('A','B','C') GROUP BY 客户) AS aLEFT JOIN #B b ON b.客户=a.客户WHERE a.还款=0 SELECT * FROM #ADROP TABLE #ADROP TABLE #B--甲 A 20 2012-05-10 00:00:00.000 NULL--甲 B 40 2012-05-10 00:00:00.000 NULL--乙 A 60 2012-05-19 00:00:00.000 NULL--乙 C 70 2012-05-20 00:00:00.000 70--乙 B 80 2012-05-20 00:00:00.000 80--甲 D 6 2012-05-24 13:51:56.293 NULL 不知道是不是想要这个结果