C# 考虑站点变化的公交车座位计算动态算法

C# 考虑站点变化的公交车座位计算动态算法,c#,.net,sql-server,logic,C#,.net,Sql Server,Logic,根据下面的数据库结果 BusStopNumber中的空值表示在本例中位于摩加迪沙的原点 BusStopNumber2中的空值表示本例中的目的地 如果一辆公共汽车上总共有10个座位 当乘客想从摩加迪沙前往哈尔格萨(目的地之前的最后一站)时,计算剩余座位数的最佳方法是什么?从起点到终点,我们预订了2个座位?类似地,我想计算SeatCount列中的可用座位,该列表示所有路线的已预订座位数 这似乎是天才,但有一个问题,如下所示,正如您在第2排中所看到的,在特定的站点上只有2个座位,在整个路线上休息应该是

根据下面的数据库结果

BusStopNumber中的空值表示在本例中位于摩加迪沙的原点 BusStopNumber2中的空值表示本例中的目的地 如果一辆公共汽车上总共有10个座位

当乘客想从摩加迪沙前往哈尔格萨(目的地之前的最后一站)时,计算剩余座位数的最佳方法是什么?从起点到终点,我们预订了2个座位?类似地,我想计算SeatCount列中的可用座位,该列表示所有路线的已预订座位数


这似乎是天才,但有一个问题,如下所示,正如您在第2排中所看到的,在特定的站点上只有2个座位,在整个路线上休息应该是2个,但所有站点的目的地都有人乘坐乘客SonSonBusatStopNumber是发车前公交车上的乘客人数,在公交车离开之前。你可以遵循一个类似的逻辑和稍微不同的数学,在公共汽车到达车站2之前计算乘客人数。所有这些,假设SeatCount是从stopnumber->stopnumber 2预订和/或占用的路线座位数。对于您的第一条评论:Row1:2座位计算为空-空,整个路线上至少有2个座位被占用。行2:2座位计数为空-1。PassengersOnBusAtStopNumber[NULL]=4Row2{2 seatCount for NULL-1}也意味着这两个人在stopnumber=1下车。从第3排开始,SeatCount=0->无预订->无乘客上车,因此乘客在出发时的停车位[1]、[2]、[3]=2 4人-2人在停车位1下车,再次,我假设SeatCount是上车或上车的人数,SeatCount=预订了从stopnumber到stopnumber的特定路线的座位。2我了解了您的现象,这些现象在逻辑上是准确的。感谢您的时间和完美的解决方案。欢迎您。通过计算每一站的乘客人数,你可以计算出一条特定路线的可用座位数:比方说,你所有的信息都是预先预订的——巴士还没有离开摩加迪沙站。如果有人想从Bossasostop:1到内罗毕stopnumber2=null,路线@1到@null的可用座位数为:'BusseatConstant:10-MAXPassengersOnBusAtStopNumber from..query。。作为av,其中av.busid=1,av.scheduleid=1,isnullav.stopnumber,0>=@1,av.stopnumber<@NULL或@NULL为NULL`
declare @booking table
(
    id int identity,
    busid int,
    scheduleid int,
    stopnumber smallint,
    stopnumber2 smallint,
    seatscount smallint
);

insert into @booking(busid, scheduleid, stopnumber, stopnumber2, seatscount)
values 
(1, 6, null, null, 2),
(1, 6, null, 1, 2),
(1, 6, null, 2, 1),
(1, 6, null, 3, 2),
(1, 6, 1, null, 2),
(1, 6, 1, 2, 1),
(1, 6, 1, 3, 1),
(1, 6, 2, null, 1),
(1, 6, 2, 3, 1),
(1, 6, 3, null, 2);

select * from @booking;


select *, 
--total number of passengers that got on the bus at previous&current stops
(select isnull(sum(e.seatscount), 0) from @booking as e where e.busid = b.busid and e.scheduleid = b.scheduleid and isnull(e.stopnumber, 0) <= isnull(b.stopnumber, 0))
-
--total number of passengers that got off the bus at previous&current stops
(select isnull(sum(d.seatscount), 0) from @booking as d where d.busid = b.busid and d.scheduleid = b.scheduleid and d.stopnumber2 <= b.stopnumber)
as PassengersOnBusAtStopNumber
from @booking as b;