读书人

100%难以写出来的slq查寻统计,

发布时间: 2012-02-03 22:02:47 作者: rapoo

100%难以写出来的slq查寻统计,求助?
有一表记录了工作记录
sj 司机表
A司机
B司机
C司机
...

work 司机工作记录表
A司机 开A车 2007-06-01
A司机 开B车 2007-06-05
A司机 开A车 2007-06-12
B司机 开B车 2007-06-01
B司机 开A车 2007-06-05
B司机 开B车 2007-06-12
C司机 开C车 2007-05-22
...

Cost 车辆固定费用表
车 费用类型 交费 交费日期 到期日期
A车 管理费 100 2007-05-29至 2007-06-08
A车 保险费 1000 2007-06-01 2008-06-01
B车 管理费 300 2007-04-22 2007-08-22
...
统计司机在2007-06-01至于 2007-06-22日间A司机、B司机...所要分担的费用
车辆固定费用要求分别分分摊到每个司机开车的区间的每一天内,请问有高手能设计出此sql语句吗,谢谢?
查查条件 1开始时间 2结束时间 3司机名
显示要求
司机名 费用总和(Cost表中管理费+保险费+...)

[解决办法]
create table Cost
(
car char(2) not null,
Type varchar(20) not null ,
cost money null,
starttime datetime null,
endtime datetime null
)

insert into cost
select 'A ' , 'guanlifei ' ,100, '2007-05-29 ', '2007-06-08 '
union all select 'A ' , 'baoxianfei ' ,1000, '2007-06-01 ', '2008-06-01 '
union all select 'B ' , 'guanlifei ' ,1000, '2007-04-22 ', '2007-08-22 '

create table sj
(sjname char(8) not null)

insert into sj
select 'A '
union all select 'B '
union all select 'C '

create table sjwork
(sjname char(8) not null,
car char(2) not null ,
riqi datetime not null)

insert into sjwork
select 'A ' , 'A ' , '2007-06-01 '
union all select 'A ' , 'B ' , '2007-06-05 '
union all select 'A ', 'A ', '2007-06-12 '
union all select 'B ', 'B ' , '2007-06-01 '
union all select 'B ' , 'A ' , '2007-06-05 '
union all select 'B ' , 'B ' , '2007-06-12 '
union all select 'C ' , 'C ', '2007-05-22 '

select datediff (day , starttime,endtime )
from cost

create proc getcost
@starttime datetime,
@endtime datetime,
@sjname char(8)
as
select sjname as '司机名 ' ,
sum(allcost) as '费用总和 '
from (
select cost.car ,
sjname ,
riqi,
cost/datediff(day,starttime ,endtime) as allcost
from


cost , sjwork
where
riqi between starttime and endtime
) as A
where A.riqi between @starttime and @endtime
and A.sjname = @sjname
group by
A.sjname

exec getcost '2007/5/12 ', '2007/9/5 ', 'A '

读书人网 >SQL Server

热点推荐