日期:2014-05-18 浏览次数:20480 次
CREATE TABLE #A ( 客户 nvarchar(50), 类型 nvarchar(50), 金额 int, 还款日期 datetime, 还款 int ) CREATE TABLE #B ( 客户 NVARCHAR(50), 比率 INT ) INSERT INTO #B SELECT '甲', 10 UNION SELECT '乙', 20 INSERT INTO #A SELECT '甲','A', 20, '2012/5/10',NULL UNION ALL SELECT '甲','B', 40, '2012/5/10',NULL UNION ALL SELECT '乙','A', 60, '2012/5/19',NULL UNION ALL SELECT '乙','C', 70 ,'2012/5/20',70 UNION ALL SELECT '乙','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,那么就罚款5 INSERT INTO #A SELECT 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 GROUP BY 客户,类型) AS a LEFT JOIN #B b ON b.客户=a.客户 WHERE a.还款=0 AND a.类型='A' SELECT * FROM #A DROP TABLE #A DROP TABLE #B ----如果金额小于2,那么就罚款5. 按你给的记录应该是小于等于2的都是5 --甲 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 5 2012-05-24 11:18:55.920 NULL --这一条是最终产生的记录插入到A表的