0

これは大変なことです。以前に存在しない場合に利用可能な予約時間を返すクエリがあります。これは機能します。ただし、テーブルにあるのがX回未満の場合にのみ返したいと思います。

例: 3 人の医師がいる診療所があります。したがって、1 日の 1 時間ごとに 3 つの予約が可能です。私のクエリは現在、利用可能な予定が 1 つしか返されません。何か案は?COUNT を使用してみましたが、これを機能させることができませんでした。

次のように考えることができます。where not exist @Xtimes

以下は、1 人の医師のみの利用可能な予約日を取得するためのクエリです。

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) から始めるのが良いでしょう。

次に、列を 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 )
于 2013-06-20T12:11:45.630 に答える