我有一张名为约会的表格,显示预约时间。
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点,早上8点30分,上午9点等)。
我使用什么查询来显示列:Apn_Id
,Apn_TimeStart
和Apn_TimeEnd
,以避免显示重复项并仅占用可用时段(caseno = null
)?
答案 0 :(得分: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中的示例结果。
答案 1 :(得分:0)
如果您想查找NULL
的约会,可以选择HAVING
条款。如果您希望所有广告位为NULL
,请使用:
HAVING COUNT(caseno) = 0
如果您希望任何插槽为&#39; NULL`,请使用:
HAVING COUNT(caseno) < COUNT(*)
请记住:COUNT(<column name>)
计算列中非NULL
值的数量。