读书人

还是不会请大家指教!解决方法

发布时间: 2012-05-27 05:42:30 作者: rapoo

还是不会,请大家指教!
急死仙人,自己水平有限,只要再次请教各位前辈了。。

表A的结构如下:

客户类型金额还款日期 还款
甲A202012/5/10
甲B402012/5/10
乙A602012/5/20
乙C702012/5/2070
乙B802012/5/2080

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

表B
客户比率
甲10
乙20


最终得到一个记录,插入表A:
客户类型金额还款日期 还款
甲 D52012-5-24


[解决办法]
客户 类型 金额 还款日期 还款
甲 D 5 2012-5-24

D是怎么来的 还款日期是怎么来的 D是默认值 还款日期是getdate()?
[解决办法]

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--1、首先取得系统日期,按照系统日期减去还款日期,大于5天的记录提取出来SELECT * FROM #A WHERE DATEDIFF(day,还款日期,GETDATE())>5--2、对于取出的记录,我们判断该客户是否有还款,那么将还款字段按照客户进行求和,那么甲为0,乙为150SELECT 客户,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 GROUP BY 客户,类型) AS aLEFT JOIN  #B b ON b.客户=a.客户WHERE a.还款=0 AND a.类型='A'SELECT * FROM #ADROP TABLE #ADROP 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表的 

读书人网 >SQL Server

热点推荐