停车费的计算

时间:2013-03-28 07:03:39

标签: sql sql-server sql-server-2008

tableTime:

ID  Time in    Time out  Vehicle Type
1   10:30      11:20     bike
2   10:40      12:30     car

table_charges:

Id  Vehicle Type  Rate
1   bike          50
2   Car           100

帮助我编写一个查询,通过应用与车辆类型相关的费率,在两个单独的列中返回总持续时间和成本。

2 个答案:

答案 0 :(得分:0)

对于持续时间,您可以先将[Time in][Time out]转换为DateTime,然后只需减去

DATEDIFF(hour, cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) )

最终查询是:

SELECT 
  t1.id, t1.[Time in], t1.[Time out], t1.[Vehicle Type]
, cast('2013-01-01 ' + t1.[Time IN]  as  datetime) as tin
, cast('2013-01-01 ' + t1.[Time out]  as  datetime) as tout
, DATEDIFF(hour,  cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) ) 
as Duration
, (DATEDIFF(hour,  cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) ) ) * 
( select rate from t2 where t2.[Vehicle Type] = t1.[Vehicle Type] )
as Charge 

FROM t1

这是 SQL Fiddle

答案 1 :(得分:0)

为您提供 SQL FIDDLE EXAMPLE

您也可以用同样的方式提问。我认为这可以帮助你收取更多的钱,因为1分钟的额外费用将被视为额外的一小时.....


select A.id, 
       Time_in, 
       Time_out,
       A.Vehicle_type,
       CEILING(DATEDIFF(Minute, Time_in, Time_out)/60.0) as Park_Duration_Hours,
       B.Rate * CEILING(DATEDIFF(Minute, Time_in, Time_out)/60.0) as TotalCharge
from TableTime A
left join TableCharges B
on A.Vehicle_Type = B.Vehicle_Type