1

我有一个名为 Appointments 的表格,显示预约的时间段。

id | time start | time end | caseno
1  |  800       | 830      | null
2  |  800       | 830      | null
3  |  900       | 930      | AB-111
4  |  900       | 930      | null

我需要显示CaseNo空的可用预约空档。但是,每次都有两个时段(上午 8 点、上午 830 点、上午 900 点等)。

我使用什么查询来显示列:Apn_IdApn_TimeStartApn_TimeEnd避免显示重复项并且只占用可用的时间段 ( caseno = null)?

4

2 回答 2

1

你可以这样做:

SELECT MIN(id) as id,time_start,time_end
FROM Appointments 
GROUP BY time_start,time_end
HAVING SUM(CASE WHEN caseno IS NOT NULL THEN 1 ELSE 0 END) = 0

解释:

Having子句用于仅占用可用时隙 ( case = null)。

MIN是为了GROUP BY(避免重复)。

结果:

id  time_start  time_end
------------------------
1   800         830

SQL Fiddle中的示例结果。

于 2015-06-07T09:27:22.347 回答
0

如果你想找到约会NULL,一个HAVING条款是要走的路。如果您希望所有插槽都为NULL,请使用:

HAVING COUNT(caseno) = 0

如果您希望任何插槽为“NULL”,请使用:

HAVING COUNT(caseno) < COUNT(*)

记住: COUNT(<column name>)计算NULL列中非值的数量。

于 2015-06-07T12:11:47.797 回答