表A(业务) 表car(车辆资料) 表car2(车身资料)
ID(单据ID) carno(车) carno(车)
no(单据编号) company(公司) car2no(车身)
date(日期) office(部门) beginday(开始关联日期)
company(公司) zhejiu(月折旧费) endday(结束关联日期)
office(部门) zhejiu(月折旧费)
carno(车)
distance(路程)
cost(运输成本)
income(收入)
表car3(车尾资料) 表DB(调拨) 表 DB2(内部调拨)
carno(车) carno(车) carno(车)
car3no(车尾) DCCompany(调出公司) DCOffice(调出部门)
beginday(开始关联日期) DRCompany(调入公司) DROffice(调入部门)
endday(结束关联日期) DBdate(调拨日期) DBdate(调拨日期)
zhejiu(月折旧费)
表service(维修单)
carno(车)
date(维修日期)
pay(费用)
一共7张表,最后查询结果字段包含
Company(公司) Office(部门) carno(车) SumDistance (总里程)
SumCost(总运输成本) SumIncome (总收入) SumZhejiu(月折旧总额) SumService(月维修总额)
即计算每家公司下每个部门下的每辆车的月收入成本情况(假设从时间D1到D2这个月内)
情况说明:折旧总额应该包含车,车身,车尾的折旧费(车可以和车身、车尾一对一或者一对二组合,类似一节车,二节车和三节车);车在一个时间段内,只能关联一个车身或者车尾(例:车A关联了车身B,就不能再关联车身B1,B2等,但可以关联车尾C);车身/车尾月折旧费按日历天数计算(例:车A在15日之前关联了车身B,16~19日没有关联任何车身,20日后关联了车身C,车A的月折旧费用为车A的折旧费+15/30*车身B的折旧费+11/30*车身C的折旧费);车辆如果发生调拨则以调拨日为分割点,调拨日前归前公司或部门,调拨日含调拨日归后公司或部门,车辆可能在一个月内发生多次调拨(例:车A在5日从公司B调到公司C,在15日从公司C调到公司D,在20日从公司D调到公司B,那么车A在公司B的天数为16天(5+11),在公司C天数为14,在公司D天数为5天);车关联的车身/车尾也按调拨日分割;如果车在调拨日还关联着车身/车尾,则车身/车尾也算调拨过去(例:车A调拨情况同上一列,车A在10号之前关联车身B,在12号后,关联车身C,那么车A在公司B的月折旧总额=16/30*车月折旧费+5/30*车身B月折旧费,车A在公司C的月折旧费=14/30*月折旧费+5/30*车身B月折旧费+3/30*车身C月折旧费,车A在公司D的月折旧费=5/30*车月折旧费+5/30*车身C月折旧费)。
因为有调拨的存在,所以车辆的月折旧费总额,计算很复杂,这个SQL语句该怎么写?
------解决思路----------------------
啊~这么长啊...看得我头发都要掉光了!

能否用存储过程啊?
用过程做思路是不是会清晰些啊?
------解决思路----------------------
力气活,且无法调试..

------解决思路----------------------
不用想了,这种要做中间表。
把车辆状态每天做个明细,每天发生的收入/费用都汇总到日明细中。
然后月明细从日明细中统计。
每天用定时任务更新,查询前把当天/当月的实时更新一次。