存储过程:六表链接查询,多条件更新主表信息

chai1338 2016-04-20 09:44:41


六个表:Guid都为varchar类型

条件:
1.从2016.2.16号起借款的用户
2.银行认证状态为1,学校认证状态为3
额度提升时间:首次借款日后第65天(截止目前为止刚好65天)
如果:65天以来都正常还款(实际还款日期-应还款日期<1天 ,精确到秒:DATEDIFF(Second,date1,date2)>3600*24)
那么:专一、本一的 额度提升800,但不超过2000
专二、本二、本三的额度提升1000,但不超过3000

解释:
从2.16号开始借款的用户:Record借款表date1大于2016-2-16
65天以来都正常还款:65天内可能会出现多笔借款,也对应多笔还款(借款数据时生成时,对应还款数据也会自动生成,只是实际还款时间为NULL),如果差一笔没还,或者有一笔逾期(实际还款日期-应还款日期>1天)则不算正常还款

专一:2016年-入学学年2015=1年,学历为专科
专二:2016年-入学学年2014=2年,学历为专科
以此类推
...全文
255 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-04-21
  • 打赏
  • 举报
回复
2016-02-16--就从CONVERT(VARCHAR(10),Getdate()-65,120)计算 ,可直接替换条件 ;WITH T1 as ( select c.U_Guid FROM   Record  AS a INNER JOIN Bank as e on e.O_Guid=a.O_Guid AND e.Status=1 INNER JOIN School as f on f.O_Guid=a.O_Guid AND f.Status=3         LEFT JOIN Bill AS b ON b.O_Guid = a.O_Guid                                                                 AND DATEDIFF(Second,b.date1,b.date2)>3600*24         INNER JOIN [ORDER] AS c ON c.O_Guid = a.O_Guid         WHERE a.createOn > '2016-02-16' group by c.U_Guid having min(case when b.date1 is not null then 2 else 1 end)=2 ) UPDATE d SET [money]=CASE WHEN d.[year]=year(GETDATE())-1 THEN CASE WHEN d.[money]+800>=2000 THEN 2000 ELSE d.[money]+800 END                  ELSE CASE WHEN d.[money]+1000>=3000 THEN 3000 ELSE d.[money]+1000 END END  from [USER] as d inner join T1 as c on d.U_Guid = c.U_Guid AND d.[level] in('01','02') AND (d.[year]=year(GETDATE())-1 AND d.[money]<2000 OR d.[year]=year(GETDATE())-2 AND d.[money]<3000)

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧