这是一个艰难的。我有一个查询,如果以前不存在,则返回可用的约会时间。这有效。但是,如果它们在表中的次数少于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)
)
)
答案 0 :(得分:1)
如果你想在某些情况下归还它们,那么EXESTS(没有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 )