0

实际上我有一个用于预订车辆的 sql 表。我从需要选择 Time_From 和 Time_To 的表格中预订车辆。

我需要在这里添加一个条款:- 如果在同一日期已经预订了车辆,那么您不能在该时间段之间预订该车辆,在您可以预订的时间段之外。

在下面查看我的预订信息

在此处输入图像描述

u2ogq - 点击查看下一张图片...

我不知道在特定日期预订车辆的次数。如何查看唯一日期的唯一车辆的所有车辆预订。我需要检查预订时间段。我需要计算特定日期特定车辆的行数。

请给我提示如何将逻辑放在车辆嘘声表格上。

感谢

4

2 回答 2

0

好的,您需要创建一个查询,该查询返回该车辆在该期间的预订,这称为子查询。在子查询中,您可以将“基本”查询中的列中的值传递给子查询。子查询逐行获取值并将它们用作参数来过滤其结果http://allenbrowne.com/subquery-01.html为(对我而言)提供了一组关于使用子查询的最佳清晰示例(是的)最初是为访问而编写的 - 但 MS-SQL 也不例外)让您了解这些非常有用,因为在很多情况下它们非常有用。希望这可以帮助

于 2013-03-01T09:12:40.230 回答
0

如评论中所述,您对两种情况感兴趣:

案例 1. 对于给定的汽车和日期,您要检查汽车是否可用

    DECLARE @car VARCHAR(20) 
    DECLARE @From DATETIME
    DECLARE @To DATETIME

    SET @car = 'your car'
    SET @From = ..
    SET @To = ..

    SELECT CASE
        WHEN (
            SELECT COUNT(1) FROM booking 
                WHERE vehilce = @car
                AND (@From >= vehilce.From AND @From <= vehilce.To)
                OR (@T0 >= vehilce.From AND @T0 <= vehilce.To)
            ) >= 1 THEN "not available" 
        ELSE "available" 
        END

案例 2. 对于给定的汽车,您希望获得未预订汽车的时间段

SELECT vehicle , previousTo ,nextFrom FROM
            (
                SELECT t1.vehicle AS vehicle, t1.From AS previosFrom, t1.To AS previousTo , t2.From AS nextFrom, t2.To AS nextTo 
                FROM booking t1
                JOIN booking t2 ON t1.vehicle,t2.vehicle OR t1.To < t2.From
                WHERE vehicle= @car
                GROUP BY vehicle, previosFrom, previousTo
                HAVING nextFrom = MIN (nextFrom)
            ) a 
于 2013-03-04T13:55:34.733 回答