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

CaseNonull の利用可能な予約枠を表示する必要があります。ただし、毎回 2 つの時間枠が利用可能です (午前 8 時、午前 8 時 30 分、午前 9 時など)。

Apn_Id列を表示するにはApn_TimeStart、どのクエリを使用すればよいですか?Apn_TimeEndcaseno = 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

である予定を見つけたい場合はNULLHAVING句が最適です。すべてのスロットを にしたい場合はNULL、次を使用します。

HAVING COUNT(caseno) = 0

スロットを「NULL」にしたい場合は、次を使用します。

HAVING COUNT(caseno) < COUNT(*)

注意: 列内COUNT(<column name>)の非NULL値の数をカウントします。

于 2015-06-07T12:11:47.797 に答える