2013-08-29 63 views
0

我有四个表。带条件的SQL Server查询

  1. 司机考勤
  2. 驾驶员信息
  3. Vechile详细
  4. 预订详情

我想要写根据某些条件的查询。

无论何时驾驶员将绑定,然后它将根据分配给驾驶员的车辆绑定。并且只有该司机才会进入下拉列表,这些列表并非每周关闭,他们也不在我将发送的特定日期上。

  • tblDriverInformation列是:1)ID 2)每周关闭

  • tblDriverAttendance柱---> 1)Driverid 2)留下自日期3)离开日期

  • Driver Id是常见于上表中。

  • tblVehicle列是---> 1)分配给>驱动器(这是常见于上表)2)ID

  • tblBooking柱---> 1)车辆ID 2)从日期开始时间3)结束日期与时间tblVehicletblBooking(在表ID和车辆ID是公用密钥)

我准备一个查询,但它是不会放弃的权利,但因为我不理解怎么放tblDriverInformationtblDriverAttendance条件。

我的查询是:

select 
    A.id, 
    (C.FName + '-' + C.LName) as Car_Driver 
from 
    tblVehicle A 
inner join 
    tblDriverInformation C on A.CarId = C.id 
where 
    A.id not in (SELECT VehicleId 
        FROM tblBooking 
        join tblVehicle on C.id = A.AssignedDriver 
        WHERE A.id = @vechileid 
        and Convert(datetime,@FromDateWithStartTime) --start date 
         BETWEEN FromDateWithStartTime AND ToDateWithEndTime 
        OR Convert(datetime,@ToDateWithEndTime) --endDate 
         BETWEEN FromDateWithStartTime AND ToDateWithEndTime 
        or FromDateWithStartTime 
         BETWEEN Convert(datetime,@FromDateWithStartTime) -- startdate 
           AND Convert(datetime,@ToDateWithEndTime) -- enddate 
        or ToDateWithEndTime 
         BETWEEN Convert(datetime,@FromDateWithStartTime) -- start date 
         AND Convert(datetime,@ToDateWithEndTime) -- enddate 
+0

请澄清你的问题,什么样的数据集你的实际需要在查询 –

回答

0

这可能会帮助你,下面的查询查找出来的车辆和驱动器关联与他们下面的条件。

1-驱动程序没有每周关闭。

2-车辆在选定的日期可用(即尚未预订)在所选日期

3-驱动器可用(即尚未预订)

SELECT D.ID, V.id 
    FROM tblDriverInformation D 
    INNER JOIN tblVehicle ON V.DRIVER_ID = D.DRIVER_ID 
    INNER JOIN tblDriverAttendance tda ON tda.DRIVER_ID = D.DRIVER_ID 
    INNER JOIN tblBooking tbl ON V.ID = tbl.VECHILCE_ID 
    WHERE D.WEEKLY_OFF= FALSE -- Driver Not Absent 
    AND (@DRIVER_FROM_DATE NOT BETWEEN (tda.FROMDATE,tda.TODATE) OR @DRIVER_TO_DATE NOT BETWEEN (tda.FROMDATE,tda.TODATE)) -- Driver not absent in these dates 
    AND (@VEHILE_FROM_DATE NOT BETWEEN (tbl.FROMDATE,tbl.TODATE) OR @VEHILE_TO_DATE NOT BETWEEN (tbl.FROMDATE,tbl.TODATE)) -- vehicle not booked in these dates 
    -- @DRIVER_FROM_DATE , @DRIVER_TO_DATE, @VEHILE_FROM_DATE, @VEHILE_TO_DATE(user input selected date) 
+0

请问我你是否需要帮助或无法理解任何事情,很乐意帮助你! –