从计算的行中查找字段

时间:2013-03-01 08:54:39

标签: c# sql arrays

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

我需要在此处提出一个条款: - 如果在同一天已有车辆预订,那么您无法在预订的时间段之间预订该车辆。

请参阅下面的预订信息

enter image description here

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

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

请告诉我如何将逻辑放在车辆表格上。

感谢

2 个答案:

答案 0 :(得分:0)

好吧你需要创建一个查询,返回该车辆的那段时间的预订,这被称为子查询。在子查询中,您可以将“base”查询中的列传递给子查询。子查询采用逐行值并使用它们作为参数来过滤其结果http://allenbrowne.com/subquery-01.html给出(对我来说)使用子查询的最佳清晰示例之一(是的,它最初是为访问而编写的 - 但是MS -SQL没有什么不同)它非常有用,让你了解这些因为它们是非常有用的非常有用的情况。希望这有帮助

答案 1 :(得分: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