0

这是困难的一个。我有一个查询,如果它们以前不存在,则返回可用的约会时间。这行得通。但是,如果它们在表中的次数少于 X 次,我只想返回它们。

例如:有一个医生办公室,有 3 名医生。因此,一天中的每个小时都有 3 个可用的约会。我的查询现在只返回 1 个可用的约会。有任何想法吗?我尝试使用 COUNT 但无法使其正常工作。

你可以这样想:where not exist @Xtimes

这是仅检索一位医生的可用预约日期的查询。

SELECT * FROM TimeScheduleTable WHERE
NOT Exists (SELECT EmployeeId FROM AppointmentTable
            WHERE EmployeeId= @pEmployeeId AND
            CONVERT(VARCHAR,AppointmentTable.ToDateTime , 101) = @pDate AND 
            (
              (CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108) >= TimeScheduleTable.StartTime AND
              CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108) <= TimeScheduleTable.EndTime)
              OR
              (CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108) >= TimeScheduleTable.StartTime AND
              CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108) <= TimeScheduleTable.EndTime)
              OR
              (CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108)<= TimeScheduleTable.StartTime AND
              CONVERT(VARCHAR(8), AppointmentTable.ToDateTime, 108) >= TimeScheduleTable.EndTime)
             )
             )
4

1 回答 1

1

如果您想在某些情况下将它们归还,WHERE EXISTS (no NOT) 似乎是一个不错的起点。

然后,您可以按列分组并实施 HAVING 子句来限制 EXISTS 是否返回任何数据。

SELECT * 
  FROM TimeScheduleTable 
 WHERE EXISTS ( SELECT EmployeeId 
                  FROM AppointmentTable
                 WHERE EmployeeId= @pEmployeeId 
                   AND ...
                 GROUP BY EmployeeID
                       -- Only return if there are less than 4
                HAVING COUNT(*) <= 3 )
于 2013-06-20T12:11:45.630 回答