2013-06-20 28 views
0

這是一個艱難的。我有一個查詢返回可用的約會時間,如果他們以前不存在。這工作。但是我只想返回它們,如果它們在表中少於X次。不存在X次數量

例如:有一個醫生辦公室有3名醫生。因此,當天每個小時有3個可用的預約。我的查詢現在只返回1個可用約會。有任何想法嗎?我嘗試過使用COUNT,但無法使其工作。

你可以有點把它想:where not exist @Xtimes

這裏是提取avaibalble預約日期只有一名醫生查詢。

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) 
      ) 
      ) 
+0

whate engine are you use? (mysql sqlserver等) – gordatron

回答

1

如果你想在某些情況下返回它們,那裏存在(沒有)看起來像一個好地方開始。

然後,您可以對您的列進行GROUP BY並實施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) 
+0

謝謝Ben的幫助!我能夠通過使用您的代碼獲得我想要的結果。我只需要替換「=」爲其他人試圖做到這一點。再次感謝本! – weisi