さて、nullの可能性があるcaseステートメントで列を使用することについて質問があります。
ここでも2つのテーブルがあり、最初のテーブルは次のようになりますUserActivity
。
userID Action Time
1 25 12:00
1 10 12:01
1 12 12:35
1 6 13:54
2 10 6:47
2 42 6:48
3 8 11:54
etc.
しかし、2番目は次のようになりますUserSchedule
:
userID startTime1 stopTime1 startTime2 stoptime2 startTime3 stopTime3
1 07:00 09:00 11:00 12:00 14:30 16:30
2 11:00 12:30 14:00 15:30
3 14:00 15:00
etc.
したがって、これらすべての開始時間と停止時間に関連して、アクションが発生した時期を評価できる必要があります。一部のユーザーは、1日に最大5回の開始/停止時間を設定します。1つしかないものもあります。
このコードは、@ Adam Wenglerによって以前の問題を解決するために私に与えられたものであり、開始時間と停止時間が1つしかない場合にうまく機能します。5つの潜在的な開始/停止列のそれぞれに対してテストし、それらが空の場合は無視するロジックを含める方法がわかりません。
UPDATE ua
SET ua.TimeStatusId = CASE
WHEN ua.Time >= us.Schedule_Start
AND ua.Time <= us.Schedule_stop THEN 1
WHEN ua.Time >= DATEADD(HOUR, -1, us.Schedule_Start)
AND ua.Time <= us.ScheduleStart THEN 0
WHEN ua.Time >= us.Schedule_Stop
AND ua.Time =< DATEADD(HOUR, 1, us.Schedule_Stop)
THEN 2
ELSE 3
END
FROM dbo.UserActivity AS ua
INNER JOIN dbo.userSchedule AS us ON ua.UserId = us.UserId