当前位置: 代码迷 >> Sql Server >> 百分求大神写1sql语句!涉及多张表,多层关系,头发都快想掉光了
  详细解决方案

百分求大神写1sql语句!涉及多张表,多层关系,头发都快想掉光了

热度:69   发布时间:2016-04-24 08:46:12.0
百分求大神写一sql语句!涉及多张表,多层关系,头发都快想掉光了
表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语句该怎么写?
------解决思路----------------------
啊~这么长啊...看得我头发都要掉光了!
能否用存储过程啊?
用过程做思路是不是会清晰些啊?
------解决思路----------------------
力气活,且无法调试..

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