2

私は車両予約システムに取り組んでおり、VehicleBookingStatus と VehicleDetails という名前の 2 つのテーブルがあります。

Vehicle_Id が共通であることにより、プライマリー フォーリン コンセプトとリンクされます。

私の車両 1 (ID) は 1 月 5 日から 1 月 10 日まで予約されています。そのため、空室状況に基づいて結果を得ることができる 2 つのテーブルの結合クエリが必要です。

例: 車両は 3 つの条件で利用できません。

  1. 日付は 1 月 3 日から 1 月 7 日です
  2. 日付は 1 月 7 日から 1 月 13 日です。
  3. 開催日は1月3日~1月15日。

以下のように SP を作成しましたが、必要な出力が得られません。

Select  
VehicleDetails.Vehicle_Id,
VehicleDetails.Vehicle_Name,
VehicleDetails.Vehicle_Capacity
   from VehicleDetails 
   left join VehicleBookingStatus on  
   VehicleDetails.Vehicle_Id = VehicleBookingStatus.Vehicle_ID
where  
   ((@UserDate NOT between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date)
AND
   (@UserEndDate not between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date))
OR 
   ((@UserDate not between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date)
and (@UserEndDate > VehicleBookingStatus.Return_Date))

@UserDate と @UserEndDate はユーザーによって提供されます。

ありがとう。

4

3 に答える 3

1

これを試して;

Select  v.Vehicle_Id, v.Vehicle_Name, v.Vehicle_Capacity
from VehicleDetails v left join VehicleBookingStatus b 
     on v.Vehicle_Id = b.Vehicle_ID
where b.Assign_Date is null or NOT (
     b.Return_Date between @UserDate and @UserEndDate OR
     b.Assign_Date between @UserDate and @UserEndDate OR 
     (b.Assign_Date < @UserDate AND b.Return_Date > @UserEndDate) )
于 2013-01-30T21:53:16.163 に答える
0

指定された期間に予約可能な車両の詳細を返すクエリが必要であると仮定します。

@UserDate より前に終了する予約、または @UserEndDate より後に開始する予約は問題ありません。

したがって、車両が利用できない条件は、@UserEndDate の前または @UserEndDate に開始され、@UserDate または @UserDate より後に終了する予約があることです。

クエリは次のようになります。

SELECT VD.Vehicle_Id,
       VD.Vehicle_Name,
       VD.Vehicle_Capacity
FROM VehicleDetails VD 
LEFT JOIN VehicleBookingStatus VBS
ON  VD.Vehicle_Id = VBS.Vehicle_ID
AND VBS.Assign_Date <= @UserEndDate
AND VBS.Return_Date >= @UserDate
WHERE VBS.Assign_Date IS NULL

前の予約が終了した同じ日に新しい予約を開始できる場合は、=標識を削除できます。

于 2013-01-30T22:06:19.400 に答える
0

編集:以下のRBarryYoungの提案を反映するように回答を変更しました:

select 
  vd.Vehicle_Id
, vd.Vehicle_Name
, vd.Vehicle_Capacity
from VehicleDetails vd
left join VehicleBookingStatus vbs on vd.Vehicle_Id = vbs.Vehicle_ID
where NOT (@UserDate <= vbs.Return_Date AND @UserEndDate >= vbs.Assign_Date)
于 2013-01-30T21:17:55.183 に答える