+ -
当前位置:首页 → 问答吧 → 合同表如何取到我需要的数据!?

合同表如何取到我需要的数据!?

时间:2011-11-05

来源:互联网

有一个门面收租金表ContractTable,它包含下列字段:

1.ContractNumber(合同号,nvarchar):主键
2.Address(地址,nvarchar):
3.LeaseDateFrom(合同起始日,Date)
4.LeaseDateTo(合同终止日,Date):LeaseDateTo和LeaseDateFrom的时间差一般为1年或2年,也就是每次租1年或2年
5.MonthRent(月租金,decimal)
6.TypeOfPayment(交租方式,nvarchar):分为两种交租方式,第一种:‘月末前预交’,要对方提前一个月交租,比如现在是11月,因为是‘预交’,所以我要收对方12月份的租金,这种很简单。第二种是‘季度末预交’,也就是3个月交一次租金(MonthRent*3),那么根据对方的LeaseDateFrom(合同起始日)确定他每年哪几个月要交一个季度的租金。因此,‘季度末预交’要细化为三种情况,分别是‘季度末预交1、4、7、10’、‘季度末预交2、5、8、11’、‘季度末预交3、6、9、12’,后面的数字是表示对方应该在哪几个月交租。


  比如:有一份合同,它的LeaseDateFrom:2011-07-01,LeaseDateTo:2013-06-30,期限为两年,TypeOfPayment:季度末预交3、6、9、12(因为LeaseDateTo是2011-07-01,那么对方第一次应该在6月份交租,且每隔1个季度交一次,以后就是每年的3、6、9、12月交租)

就以上例为例:我现在想预测一下2012年6月份这个合同是否到了收租时间,应该收多少!
代码我是这样写的:

SQL code

select ContractNumber as 合同号,LeaseDateFrom as 合同起始日,LeaseDateTo as 合同终止日,TypeOfPayment as 交租方式,
(case 
when TypeOfPayment='月末预交1、4、7、10') then MonthRent
when TypeOfPayment='季度末预交1、4、7、10') then 0
when TypeOfPayment='季度末预交2、5、8、11') then 0
when TypeOfPayment='季度末预交3、6、9、12') then MonthRent*3
else 0
end) as 本月应收
from ContractTable



  以上代码没有问题:但我想再添加几个功能:

  第一个功能,加上一栏表示该合同已经交到什么时候了,比如上例2012-6-30前预交了一个季度的租金,那么他已经交7、8、9月的租金(2012-7-1到2012-9-30),我想加上的一栏就是要显示他已经交到了‘2012-9-30’这个时间。

  第二个功能,再加上一栏表示该合同从开始之日到2012年6月已经总共交了多少租金了。(这个要考虑TypeOfPayment,绝对不是简单的用2012月6减合同起始日再乘以MonthRent)

  总而言之,我只给出一个时间变量,需要数据库为我智能提供相应的数据!

  请问!该怎么完善呢?!

作者: linjiangxian11   发布时间: 2011-11-05

功能2:
SQL code

select 合同号,sum(本月应收) from(
select ContractNumber as 合同号,LeaseDateFrom as 合同起始日,LeaseDateTo as 合同终止日,TypeOfPayment as 交租方式,
(case 
when TypeOfPayment='月末预交1、4、7、10') then MonthRent
when TypeOfPayment='季度末预交1、4、7、10') then 0
when TypeOfPayment='季度末预交2、5、8、11') then 0
when TypeOfPayment='季度末预交3、6、9、12') then MonthRent*3
else 0
end) as 本月应收
from ContractTable
)t group by 合同号

作者: qianjin036a   发布时间: 2011-11-05

感谢您的及时回复!不过您大概没仔细看我的帖子!得到的数据不对!

作者: linjiangxian11   发布时间: 2011-11-05